不同的CPU采用的字节顺序可能不一样,常见的有little-endian和big-endian,little-endian是指将低位字节放在前面,高位字节放在后面,big-endian刚好相反。比如存储0x 00 00 01 02,存储位置为 0010到0013,在little-endian的情况下,存储方式为:
0010:02
0011:01
0012:00
0013:00
在big-endian情况下,存储方式为:
0010:00
0011:00
0012:01
0013:02
在网络通信中,计算机收到的字节按什么顺序处理容易引起混乱,为了做到与CPU无关,网络通信中规定字节顺序采用big-endian方式。
下面是python程序,用于转换为网络字节序和本地字节序
#!/usr/bin/env python
import sys,struct
def hton(num): #转换为网络字节序
return struct.pack('!H',num)
def ntoh(num) #转换为本地字节序
return struct.unpack('!H',num)
print "input a number"
num=raw_input()
num=int(num)
print repr(hton(num))
print repr(ntoh(hton(num)))
运行程序:
Input a number:
12
'\x00\x00\x00\x0c’
12