
#include <stdio.h>int main(){ unsigned char a[4] = {1,2,3,4}; int b = *(int *)&a[0]; printf("%d\n",b); return 0;} 我只是不明白为什么b的结果是0x4030201.
有人可以帮我吗?
解决方法 当你告诉编译器创建一个这样的数组:unsigned char a[4] = {1,4}; 这些数字按照以下顺序放在内存中:
MemoryAddress0: 0x01 -> a[0]MemoryAddress1: 0x02 -> a[1]MemoryAddress2: 0x03 -> a[2]MemoryAddress3: 0x04 -> a[3]
& a [0]是一个具有MemoryAddress0值的char指针,并指出1字节值为0x01
(int *)& a [0]是一个具有相同值MemoryAddress0但是int *类型的转换指针,所以它指向四个连续的字节.
我们在日常生活中使用的大多数机器是小端,这意味着它们将内存中的多字节值从最低有效字节存储到最重要的字节.
当int *指向四个字节的存储器时,遇到的第一个字节是最低有效字节,第二个字节是第二个最低有效字节等等.
MemoryAddress0: 0x01 -> 2^0 termMemoryAddress1: 0x02 -> 2^8 termMemoryAddress2: 0x03 -> 2^16 termMemoryAddress3: 0x04 -> 2^24 term
因此,4字节整数值变为0x01 * 2 ^ 0 0x02 * 2 ^ 8 0x03 * 2 ^ 16 0x04 * 2 ^ 24,等于0x04030201.
总结以上是内存溢出为你收集整理的将char数组转换为整数全部内容,希望文章能够帮你解决将char数组转换为整数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)