这是我的代码,它从十六进制转换为十进制。十六进制值存储在unsigned char数组中:
int liIndex ;
long hexToDec ;
unsigned char length[4];
for (liIndex = 0; liIndex < 4 ; liIndex++)
{
length[liIndex]= (unsigned char) *content;
printf("\n Hex value is %.2x", length[liIndex]);
content++;
}
hexToDec = strtol(length, NULL, 16);
每个数组元素包含1个字节的信息,我读取了4个字节。当我执行它时,这是我得到的输出:
Hex value is 00
Hex value is 00
Hex value is 00
Hex value is 01
Chunk length is 0
任何人都可以帮我理解这里的错误。十进制值应该是1而不是0。
此致 darkie
答案 0 :(得分:2)
strtol
期待一个以零结尾的字符串。 length[0] == '\0'
,因此strtol就在那里停止处理。它可以转换像“0A21”这样的东西,而不像{0,0,0,1}这样的东西。
content
的内容是什么?你想做什么,确切地说?你所建造的东西在很多方面对我来说都很奇怪。
答案 1 :(得分:2)
我对你使用%x的猜测是content
将十六进制数编码为整数数组,而不是字符数组。也就是说,您将content
中的0位数表示为'\0'
,还是'0'
?
strtol
仅适用于后一种情况。如果content
确实是一个整数数组,那么下面的代码应该可以解决这个问题:
hexToDec = 0;
int place = 1;
for(int i=3; i>=0; --i)
{
hexToDec += place * (unsigned int)*(content+i);
place *= 16;
}
content += 4;