大小端是计算机存储信息的不同方式。
大段:内存低地址位存储数据高位,内存高地址位存储数据低位。
小端:内存低地址位存储数据低位,内存高地址位存储数据高位。
举例,32位系统上 int value = 0x12345678
存储在0x0000-0x0003的内存地址上
大端:
0x0000 : 0x12
0x0001 :0x34
0x0002 :0x56
0x0003 :0x78
小端:
0x0000 : 0x78
0x0001 :0x56
0x0002 :0x34
0x0003 :0x12
用代码检验系统大端/小端
//返回值为1为小端,返回值为0为大端 bool CheckEnd() { int value = 1; return (*((char*)(&value)) == 1); }
另外,网络字节序也是大端的
小端系统在发送数据和接收数据时需要使用以下htons/htonl 和 ntohs/ntohl 函数转换字节序
//htons u16_t htons(u16_t value) { return (((value & 0xff00)>>8) | ((value & 0x00ff) << 8)); } //htonl u32_t htonl(u32_t value) { return (((value & 0xff000000) >> 24) | ((value & 0x00ff0000) >> 8) | ((value & 0x0000ff00) << 8) | ((value & 0x000000ff) <<24)); } //ntohs u16_t ntohs(u16_t value) { return htons(value); } //ntohl u32_t ntohl(u16_t value) { return htonl(value); }