当我将char数组转换为整数数组时,字节序列为什么会转?

时间:2019-06-27 11:14:42

标签: c type-conversion

例如:

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的二进制文件。为什么会旋转?

1 个答案:

答案 0 :(得分:2)

  

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

在Little-endian机器中,每个值中字节的顺序是相反的,如下图所示: enter image description here

因此,当您编写一个具有增加的内存地址的char数组时,您正在逐字节地编写该字节,而不受机器字节顺序的影响,但是当您尝试将整个4个字节读取为单个整数值时,向后读。

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

更多信息,请访问Wikipedia