即使系统是 Little-Endian,程序也是 Big-Endian

-1 c linux gcc endianness

不知何故,我的程序将变量视为大端,即使我的系统是小端。

当我执行“lscpu | grep Endian”时,它返回

Byte Order:                      Little Endian
Run Code Online (Sandbox Code Playgroud)

但是当我使用以下代码运行调试 gcc (x86_64 linux) 可执行文件时:

int x = 1235213421;
printf("%x", x);
Run Code Online (Sandbox Code Playgroud)

它返回 0x499FDC6D,而对于小端,它应该返回 0x6DDC9F49

Lun*_*din 6

您告诉printf打印一个整数,因此它根据字节序打印整数,从而使代码可移植。如果您想查看数据在内存中的存储方式,则必须逐字节查看,如下所示:

int x = 1235213421;
unsigned char* ptr = (unsigned char*)&x;
for(size_t i=0; i<sizeof(int); i++)
{
  printf("%.2x", ptr[i]);
}
Run Code Online (Sandbox Code Playgroud)