加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将char数组转换为整数

发布时间:2020-12-16 05:34:49 所属栏目:百科 来源:网络整理
导读:#include stdio.hint main(){ unsigned char a[4] = {1,2,3,4}; int b = *(int *)a[0]; printf("%dn",b); return 0;} 我只是不明白为什么b的结果是0x4030201. 有人可以帮我吗? 解决方法 当你告诉编译器创建一个这样的数组: unsigned char a[4] = {1,4};
#include <stdio.h>

int main(){
    unsigned char a[4] = {1,2,3,4};
    int b = *(int *)&a[0];

    printf("%dn",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 term
MemoryAddress1: 0x02 -> 2^8 term
MemoryAddress2: 0x03 -> 2^16 term
MemoryAddress3: 0x04 -> 2^24 term

因此,4字节整数值变为0x01 * 2 ^ 0 0x02 * 2 ^ 8 0x03 * 2 ^ 16 0x04 * 2 ^ 24,等于0x04030201.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读