# 主机字节序和网络字节序之间的相互转换 import socket def convert_integer(): data = 1234 # 32-bit print("Original: %s => Long host byte order: %s, Network byte order: %s" % (data, socket.ntohl(data), socket.htonl(data))) # 16-bit print("Original: %s => Short host byte order: %s, Network byte order: %s" % (data, socket.ntohs(data), socket.htons(data))) if __name__ == '__main__': convert_integer()
运行结果
ntohl()、ntohs()、htonl()、htons()解释
1. ntohl() 将网络字节顺序转换成主机字节顺序(长字节32bit)
2. ntohs() 将网络字节顺序转换成主机字节顺序(短字节16bit)
3. htonl() 将主机字节顺序转换成网络字节顺序(长字节32bit)
4. htons() 将主机字节顺序转换成网络字节顺序(短字节16bit)
网络字节顺序和主机字节顺序解释
网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。 主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。 如 Intel x86结构下, short型数0x1234表示为34 12, int型数0x12345678表示为78 56 34 12 如 IBM power PC结构下, short型数0x1234表示为12 34, int型数0x12345678表示为12 34 56 78