大端序(big endian):高序字节存储在低地址(指CPU对操作数的存放方式是将数据的高位存放在内存中的低地址,而数据的低位存放在内存中的高地址。)
- 将高字节存储在起始地址,成为“Big Endian”字节序,由Motorola等所采用
- ARM大小端可选
小端序(little endian):低序字节存储在低地址(指CPU对操作数的存放方式是将数据的低位存放在内存中的高地址,而数据的低位存放在内存中的搞地址。)
- 将低字节存储在起始地址,成为“Little Endian”字节序,Intel、AMD等采用的是这种方式。
大多数ARM处理器都是采用的小端模式,网络中传输的数据必须按网络字节序,即大端序。
在大部分PC机上,当应用进程将整数送入socket前,需要转化成网络字节序;当应用进程从socket取出整数后,要转化成小端字节序。
字节序转换函数
把给定系统所采用的的字节序称为主机字节序。为了避免不同类别主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序。
主机字节序(Host Byte Order)到网络字节序(Network Byte Order):
- uint32_t htonl(uint32_t hostlong);
- uint16_t htons(uint16_t hostshort);
网络字节序到主机字节序:
- uint32_t ntohl(uint32_t netlong);