可能有重复:
使用sscanf将长十六进制字符串转换为int数组 我之前看到过一些相关话题,但大多数解决方案都是用Python(该死的Python太容易了!)。
在C中有没有简单的方法? 我知道这在概念上不复杂,但我对C字符串操作和地址处理不熟练。
谢谢大家的帮助!
----------编辑-------------
好的,我解决了那个问题,并且我还有另一个问题(我不想打开新的线程!)。 下面是我修改后的代码,包括函数调用和输出结果。
这是我的函数调用:
这是输入001133c0时的输出结果:
0000
00000000
000000000001
0000000000010001
00000000000100010011
000000000001000100110011
0000000000010001001100111100
00000000000100010011001111000000
0���
最后一行(带有特殊字符的行)是上面主函数中的printf(binAddr)。从函数内部的printf语句可以清楚地看出,二进制代码被正确构造了。
再次说明,这取决于我在地址操作方面的无能。我做错了什么?
使用sscanf将长十六进制字符串转换为int数组 我之前看到过一些相关话题,但大多数解决方案都是用Python(该死的Python太容易了!)。
在C中有没有简单的方法? 我知道这在概念上不复杂,但我对C字符串操作和地址处理不熟练。
谢谢大家的帮助!
----------编辑-------------
好的,我解决了那个问题,并且我还有另一个问题(我不想打开新的线程!)。 下面是我修改后的代码,包括函数调用和输出结果。
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���
最后一行(带有特殊字符的行)是上面主函数中的printf(binAddr)。从函数内部的printf语句可以清楚地看出,二进制代码被正确构造了。
再次说明,这取决于我在地址操作方面的无能。我做错了什么?