将unsigned char数组转换为整数

时间:2012-04-30 17:41:22

标签: c++ c arrays char int

据我所知,在C编程语言中,数组按元素存储在内存元素中。 (即元素0,元素1,元素2,......,元素n)。我试图通过以下代码看到它:

unsigned char a[] = { '\1' , '\2', '\3' ,'\4' };  
printf("%d\n", (int*) a);

因为unsigned char是1个字节而整数是4个字节;我认为必须打印价值:

  <00> 00000001 00000010 00000011 00000100 = 2 ^ 2 + 2 ^ 8 + 2 ^ 9 + 2 ^ 17 + 2 ^ 24 = 16909060

但是,当我运行此程序时,它会为每次试验产生不同的结果。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

您可能想要使用*(int *)a,否则您只是打印一个地址。

但是,这将调用实现定义的行为:

  • 根据平台的endianness,您会得到不同的结果。
  • 根据平台的不同,char数组可能无法正确对齐,无法作为int读取。
  • 编译器可以根据您永远不会通过char读取int *数组的假设执行时髦的优化 - 您正在破坏所谓的严格别名规则