python16进制字节序_Python网络编程——主机字节序和网络字节序之间的相互转换...

If you ever need to write a low-level network application, it may be necessary to handle the low-level data transmission over the wire between two machines. This operation requires some sort of conversion of data from the native host operating system to the network format and vice versa. This is because each one hat its own specific representation of data.

编写底层低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。

1. 代码

1 #主机字节序和网络字节序之间的相互转换

2

3 importsocket4

5

6 defconvert_integer():7 data = 1234

8 #32-bit

9 print("Original: %s => Long host byte order: %s, Network byte order: %s"

10 %(data, socket.ntohl(data), socket.htonl(data)))11 #16-bit

12 print("Original: %s => Short host byte order: %s, Network byte order: %s"

13 %(data, socket.ntohs(data), socket.htons(data)))14

15 if __name__ == '__main__':16 convert_integer()

2. ntohl()、ntohs()、htonl()和htons()解释

1 def ntohl(integer): #real signature unknown; restored from __doc__

2 """

3 ntohl(integer) -> integer4

5 Convert a 32-bit integer from network to host byte order.6 """

7 return08 # 将网络字节顺序转换成主机字节顺序(32bit)9

10 def ntohs(integer): #real signature unknown; restored from __doc__

11 """

12 ntohs(integer) -> integer13

14 Convert a 16-bit integer from network to host byte order.15 """

16 return017 # 将网络字节顺序转换成主机字节顺序(16bit)18

19 def htonl(integer): #real signature unknown; restored from __doc__

20 """

21 htonl(integer) -> integer22

23 Convert a 32-bit integer from host to network byte order.24 """

25 return026 # 将主机字节顺序转换成网络字节顺序(32bit)27

28 def htons(integer): #real signature unknown; restored from __doc__

29 """

30 htons(integer) -> integer31

32 Convert a 16-bit integer from host to network byte order.33 """

34 return035 # 将主机字节顺序转换成网络字节顺序(16bit)

3.网络字节顺序和主机字节顺序解释

网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。

主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。

如 Intel x86结构下, short型数0x1234表示为3412, int型数0x12345678表示为78 56 34 12如 IBM power PC结构下, short型数0x1234表示为1234, int型数0x12345678表示为12 34 56 78

4.运行结果

1 Original: 1234 => Long host byte order: 3523477504, Network byte order: 3523477504

2 Original: 1234 => Short host byte order: 53764, Network byte order: 53764

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值