编写低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。
Python的socket库提供了将数据在网络字节序和主机字节序之间相互转换的函数。可能想了解这些函数,例如ntohl()和htonl()。调用ntohl()和htonl()类函数来转换不同格式的数据。
import socket
def convert_integer():
data = 1314
# 32-bit
print("Original: {} => Long host byte order: {}, Network byte order: {}".format(data, socket.ntohl(data), socket.htonl(data)))
# 16-bit
print("Original: {} => Short host byte order: {}, Network byte order: {}".format(data, socket.ntohs(data), socket.htons(data)))
if __name__ == '__main__':
convert_integer()
运行结果输出如下:
Original: 1314 => Long host byte order: 570753024, Network byte order: 570753024
Original: 1314 => Short host byte order: 8709, Network byte order: 8709