socket中的ntohl() 和ntohs() ,以及htonl()和htons()

import socket
data = 1234
print('ntohl  is ',socket.ntohl(data),'  , ','htonl  is ',socket.htonl(data))
print('ntohs  is ',socket.ntohs(data),'  , ','htons  is ',socket.htons(data))

输出结果:

ntohl  is  3523477504   ,  htonl  is  3523477504
ntohs  is  53764   ,  htons  is  53764

1234 为十进制,转换成十六进制为4d2

(1)ntohl()函数是 Convert a 32-bit integer from network to host byte order.

4d2  ====》00 00 04 d2(32位)

排序,从右往左 便成为了  d2 04 00 00

windows(小端法:低位字节在低地址)下:

      addr   addr+1   addr+2   addr+3

0x     d2        04          00            00

0xd2040000  ,转换成十进制数即为3523477504 

(2)ntohs()函数是Convert a 16-bit integer from network to host byte order.

4d2  ====》 04 d2(16位)

排序,从右往左 便成为了  d2 04

0xd204  ,转换成十进制数即为53764

 

接着我用data=1,验证了一下:

import socket
data = 1
print('ntohl  is ',socket.ntohl(data),'  , ','htonl  is ',socket.htonl(data))
print('ntohs  is ',socket.ntohs(data),'  , ','htons  is ',socket.htons(data))

输出结果为:

ntohl  is  16777216   ,  htonl  is  16777216
ntohs  is  256   ,  htons  is  256

解析:

1转换成32位的16进制为:0x 00 00 00 01,排序  0x 01 00 00 00  转换成十进制16的6次方

1转换成16位的16进制为:0x 00 01,排序 0x 01 00 转换成十进制为 16的2次方

posted @ 2019-01-16 10:06  SteveSun  阅读(1003)  评论(0)    收藏  举报