C中的十六进制到十进制转换

时间:2010-04-04 22:27:20

标签: c decimal hex

这是我的代码,它从十六进制转换为十进制。十六进制值存储在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

2 个答案:

答案 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;