字节序有两种:大端字节序(Big Endian, BE)和小端字节序(Little Endian, LE).
网络字节序为大端字节序,个人PC字节序因平台不同而不同。
Linux操作系统提供了如下函数进行字节序的转换:
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong); //主机字节序到网络字节序4字节转换
uint32_t ntohl(uint32_t netlong); //网络字节序到主机字节序4字节转换
uint16_t htonl(uint16_t hostshort); //主机字节序到网络字节序2字节转换
uint16_t ntohl(uint16_t netshort); //网络字节序到主机字节序2字节转换
h代表host 主机
n代表network 网络
注意:进行网络字节序转换的时候,只要转换一次就可以了,不要进行多次的转换。如果进行多次字节序转换,最后生成的网络字节序的值可能是错误的。这个需要看转换函数的实现:先判断本机是什么字节序,需要转换就转换,不需要则不转换。