主機位元組序與網路位元組序的轉換:ntohl()與htonl()
阿新 • • 發佈:2019-01-27
#!/usr/bin/env python #coding=utf-8 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()
執行結果:
32位:
1234D=0xD2040000
windows(小端法:低位位元組在低地址)下:
addr addr+1 addr+2 addr+3
0x D2 04 00 00
ntoh():假定給定資料是網路位元組序(大端法:低位位元組在高地址):
在windows內在中儲存形式為:
addr addr+1 addr+2 addr+3
0x D2 04 00 00(當作是大端法)
轉換後: 00 00 04 D2
在windows(小端法)下讀取出來:
0xD2040000=3523477504
hton():假定給定資料是主機位元組序(windows下為小端法):
在windows內在中儲存形式為:
addr addr+1 addr+2 addr+3
0x D2 04 00 00(當作是小端法)
轉換後: 00 00 04 D2
在windows(小端法)下讀取出來:
0xD2040000=3523477504
同理可分析16位下的情況。