Хорошо, у меня есть вопрос, я думаю о C-строках.Ниже моя модификация некоторого кода (дана в ответе на предыдущий вопрос stackoverflow!), С вызовом функции и выводом.Функция преобразует входное шестнадцатеричное число (длиной 8) в двоичное число (длиной 32).
void htoi(const char *ptr, char *binAddr) {
char value[32] = "";
char ch = *ptr;
int i;
const char* quads[] = {"0000", "0001", "0010", "0011", "0100", "0101",
"0110", "0111", "1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"};
while (ch == ' ' || ch == '\t')
ch = *(++ptr);
for (i = 0; i < 8; i++) {
if (ch >= '0' && ch <= '9')
strncat(value, quads[ch - '0'], 4);
if (ch >= 'A' && ch <= 'F')
strncat(value, quads[10 + ch - 'A'], 4);
if (ch >= 'a' && ch <= 'f')
strncat(value, quads[10 + ch - 'a'], 4);
ch = *(++ptr);
printf("%s\n", value);
}
*binAddr = *value;
}
Вот мой вызов функции:
char line[11], hexAddr[8], binAddr[32];
htoi(hexAddr, binAddr);
printf("%s\n", binAddr);
Вот вывод(при вводе с 001133c0):
0000
00000000
000000000001
0000000000010001
00000000000100010011
0000000000010001001100111019 *
0000000000010001001100111100
00000000000100010011001111000000
0���
Последняя строка (со специальными символами) - это printf (binAddr) в главной функции выше.Из операторов printf внутри функции ясно, что двоичный код создается правильно.
Что я делаю не так?