不论是小端存储还是大端存储,都是从低地址向高地址存储的,唯一不同的在于当一个变量占用多个字节的时候
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