例如:
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的二进制文件。为什么会旋转?
答案 0 :(得分:2)
Intel x86以及AMD64 / x86-64系列处理器使用little-endian格式。 最低有效字节(LSB)值位于最低地址。其他字节按重要性升序排列。这类似于以十六进制顺序从右向左读取。
在Little-endian机器中,每个值中字节的顺序是相反的,如下图所示:
因此,当您编写一个具有增加的内存地址的char数组时,您正在逐字节地编写该字节,而不受机器字节顺序的影响,但是当您尝试将整个4个字节读取为单个整数值时,向后读。
请注意,数组中值的顺序不受机器字节顺序的影响,而是仅对单个“多字节值”中的字节进行重新排序。
更多信息,请访问Wikipedia