Python网络编程攻略1.6 主机字节序和网络字节序之间相互转换_Python网络编程攻略1.6 主机字节序和网络字节序之间相互转换试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > web > Python网络编程攻略 > 1.6 主机字节序和网络字节序之间相互转换

Python网络编程攻略——1.6 主机字节序和网络字节序之间相互转换

编写低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。 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.1 简介
• 1.2 打印设备名和IPv4地址
• 1.3 获取远程设备的IP地址
• 1.4 将IPv4地址转换成不同的格式
• 1.5 通过指定的端口和协议找到服务名
• 1.6 主机字节序和网络字节序之间相互转换 [当前]
• 1.7 设定并获取默认的套接字超时时间
• 1.8 优雅地处理套接字错误
• 1.9 修改套接字发送和接收的缓冲区大小
• 1.10 把套接字改成阻塞或非阻塞模式
• 1.11 重用套接字地址
• 1.12 从网络时间服务器获取并打印当前时间
• 1.13 编写一个SNTP客户端
• 1.14 编写一个简单的回显客户端/服务器应用
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •