什么是大端和小端
大端
Big-Endian
:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
值:0x123456
低地址 -----> 高地址
0x12 | 0x34 | 0x56
小端
Little-Endian
:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
值:0x123456
低地址 -----> 高地址
0x56 | 0x34 | 0x12
怎样判断大小端
通过强制类型转换
int is_big_endian(void)
{
short a = 0x1234;
char b = *(char*)&a;
if(0x12 == b)
{
return 1; /* 大端 */
}
return 0;
}
利用联合体共享内存特性
int is_big_endian(void)
{
union _data
{
short a;
char b;
} data;
data.a = 0x1234;
if(0x12 == data.b)
{
return 1; /* 大端 */
}
return 0;
}