【发布时间】:2012-01-02 15:58:44
【问题描述】:
好的,我有一个问题,我猜是关于 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
000000000001000100110011
0000000000010001001100111100
00000000000100010011001111000000
0...
最后一行(带有特殊字符)是上面 main 函数中的 printf(binAddr)。从函数内部的 printf 语句可以清楚地看出,二进制代码的构造是正确的。
我做错了什么?
【问题讨论】: