假设以下 C 代码在 32 位平台上运行(因此 sizeof(int) = 4),以下代码是否可在大端和小端之间移植?当我问“它是否便携”时,我的意思是应用程序会打印:
a) 在小端平台上
Address is 0xAABBCCDD
MSB is AA
LSB is DD
little endian
b) 在大端平台上
Address is 0xAABBCCDD
MSB is AA
LSB is DD
big endian
?
#include <stdio.h>
typedef unsigned char uint8;
typedef unsigned int uint32;
#define is_bigendian() ( (*(uint8*)&var) == 0 )
int main()
{
uint32 var = 1;
uint8 msb;
uint8 lsb;
printf("Address is %x\n", (uint32)&var);
msb = (((uint32)&var) & 0xFF000000) >> 24;
lsb = (((uint32)&var) & 0x000000FF) >> 0;
printf("MSB is %x\n", msb);
printf("LSB is %x\n", lsb);
if (is_bigendian())
{
printf("big endian\n");
}
else
{
printf("little endian\n");
}
return 0;
}