首页 > 解决方案 > 为什么将 char 数组转换为整数数组时字节序列会发生变化?

问题描述

例如:

int main(int argc, char* argv[]){
    char a[4]={0,0,0,1};
    int *ia=(int *)a;
    printf("%d",ia[0]);
}

它打印 16777216 因为它是二进制的 00000001 00000000 00000000 00000000 。为什么会转?

标签: ctype-conversion

解决方案


Intel x86 和 AMD64 / x86-64 系列处理器使用 little-endian 格式。最低有效字节 (LSB) 值位于最低地址。其他字节以重要性的递增顺序跟随。这类似于以十六进制顺序从右到左读取。

在 little-endian 机器中,每个值中的字节顺序是颠倒的,如下图所示: 在此处输入图像描述

因此,当您编写内存地址增加的字符数组时,您正在逐字节写入,不受机器字节序的影响,但是当您尝试将整个 4 字节作为单个整数值读取时,它会向后读取。

请注意,数组中值的顺序不受机器字节序的影响,但仅对单个“多字节值”中的字节进行重新排序。

在维基百科上阅读更多


推荐阅读