Little endian § Big endian

393 阅读1分钟
不论是小端存储还是大端存储,都是从低地址向高地址存储的,唯一不同的在于当一个变量占用多个字节的时候
1. 对于小端存储,低地址存放的是变量的低字节
2. 对于大端存储,低地址存放的是变量的高字节

比如对于0xABCDEFGH,
				(地址从低到高)
		------------------------------------->

小端:			0xGH 0xEF 0xCD 0xAB

大端:			0xAB 0xCD 0xEF 0xGH


如果在两中不同架构的系统间通信的话,由于传输的都是字节流,比如小端传送0x11223344,
				(地址从低到高)
		------------------------------------->

小端:			0x11 0x22 0x33 0x44

大端:			0x11 0x22 0x33 0x44
大端接收到的也是字节流也是0x11 0x22 0x33 0x44,但是在大端看来,这个表示的就是0x44332211

为了避免这种由于系统架构带来的问题,就要通过htons htonl将主机序转换成统一的网络序,
然后再在小/大端那里调用ntohl ntohs将网络序转换成主机序

还是拿上面的举例
				(地址从低到高)
		------------------------------------->

小端:			0x11 0x22 0x33 0x44
                       |
                       |
网络          0x44 0x33 0x22 0x11
					   |
                       |
大端:			0x44 0x33 0x22 0x11

这样同样的值在小端是0x44332211,在大端也是0x44332211