1. 程式人生 > >主機位元組序與網路位元組序的轉換:ntohl()與htonl()

主機位元組序與網路位元組序的轉換:ntohl()與htonl()

#!/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位下的情況。