繁体   English   中英

将无符号字符数组转换为整数

[英]Converting unsigned char array to an integer

据我所知,在C语言中,数组是逐个元素存储在内存中的。 (即元素0,元素1,元素2,...,元素n)。 我正在尝试通过以下代码进行查看:

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

由于无符号字符为1个字节,整数为4个字节; 我认为它必须打印出值:

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

但是,当我运行该程序时,它会为每个试验生成不同的结果。

我在这里想念什么?

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

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

  • 根据平台的字节顺序 ,您将获得不同的结果。
  • 根据平台的不同, char数组可能未正确对齐以读取为int
  • 编译器可能会基于以下假设执行时髦的优化:您将永远不会通过int *读取char数组-这违反了严格的别名规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM