编写低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。 1.6.1 实战演练 Python的socket库提供了将数据在网络字节序和主机字节序之间相互转换的函数。你可能想了解这些函数,例如ntohl()和htonl()。 我们来定义convert_integer()函数,调用ntohl()和htonl()类函数来转换不同格式的数据。 代码清单1-5展示了如何定义convert_integer()函数,如下所示: #!/usr/bin/env python # Python Network Programming Cookbook -- Chapter -1 # This program is optimized for Python 2.7. # It may run on any other version with/without modifications. 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() 运行这个攻略,会看到以下输出: $ python 1_5_integer_conversion.py Original: 1234 => Long host byte order: 3523477504, Network byte order: 3523477504 Original: 1234 => Short host byte order: 53764, Network byte order: 53764 1.6.2 原理分析 在这个攻略中,我们以整数为例,演示了如何把它转换成网络字节序和主机字节序。socket库中的类函数ntohl()把网络字节序转换成了长整形主机字节序。函数名中的n表示网络;h表示主机;l表示长整形;s表示短整形,即16位。
Python网络编程攻略——1.6 主机字节序和网络字节序之间相互转换
书名: Python网络编程攻略
作者: 萨卡尔
出版社: 人民邮电出版社
译者: 安道
出版年: 2014-12-1
页数: 170
定价: 45.00元
装帧: 平装
丛书: 图灵程序设计丛书
ISBN: 9787115372697