-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
您告诉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)