大小端定义
大小端(Endian)是计算机系统中用来表示多字节数据的存储顺序的一个概念。大端(Big Endian)和小端(Little Endian)是指数据在内存中存储的高低字节顺序。
在大端序中,数据的高位字节存储在低位地址,低位字节存储在高位地址。例如,十六进制数0x12345678在大端序中的存储顺序为0x12、0x34、0x56、0x78。
在小端序中,数据的低位字节存储在低位地址,高位字节存储在高位地址。例如,十六进制数0x12345678在小端序中的存储顺序为0x78、0x56、0x34、0x12。
大小端的判定
这里提供一种用union判定大小端的方式
union EndianCheck {
int num;
char c;
};
int main() {
union EndianCheck ec;
ec.num = 1;
if(ec.c) {
printf("Little Endian\n");
}
else {
printf("Big Endian\n");
}
return 0;
}
这里利用了一下union成员共用一块内存地址的原理。
总结
常见的处理器架构如x86使用的是小端序,而PowerPC和ARM等处理器则使用的是大端序。在网络中,由于不同计算机之间的字节序可能不同,网络协议通常规定使用大端序来传输数据,这样可以保证不同系统之间的互操作性。