大端小端
区别
大端:低位放在高地址,高位放在低地址(0x12中1是高位,2是低位)
小端:低位放在低地址,高位放在高地址
举例
假设一个类型为int的变量x,x的首地址为0x100即&x的值为0x100。那么x的4个字节被存储在存储器的0x100,0x101,0x102,0x103的位置。x 的值为16进制 0x12345678。
应用
编写网络程序时,主机之间通过网络相互通信,不同主机之间可能采用不用的存储方法,而且网络字节序和主机字节序也有可能不同。
网络和主机转换函数
n 代表的就是 network,h 代表的是 host,s 表示的是 short,l 表示的是 long,分别表示 16 位和 32 位的整数。
uint16_t htons (uint16_t hostshort)
uint16_t ntohs (uint16_t netshort)
uint32_t htonl (uint32_t hostlong)
uint32_t ntohl (uint32_t netlong)
如何判断是大端还是小端
我们可以根据联合体来判断该系统是大端还是小端。因为联合体变量总是从低地址存储。
void judge()
{
union
{
int i;
char c;
}un;
un.i = 1;
if (un.c == 1)
printf("小端\n");
else
printf("大端\n");
}