主机字节序和网络字节序之间的相互转换
1、字节序问题
计算机以字节(Octet,8 bit)进行数据组织,大于一个字节的数据需要区分字节顺序,目前存在两种字节序:
BE:Big Endian(High-byte first),主要应用于Inter X86平台
LE:Little Endian(Low-byte first),主要应用于PowerPC平台
2、源程序部分
import socketdef convert_integer():data = 1234print "Original: %s => Long host byte order: %s, Network byte order: %s" % (data, socket.ntohl(data), socket.htonl(data))print "Original: %s => Long host byte order: %s, Network byte order: %s" % (data, socket.ntohs(data), socket.htons(data))if __name__ == '__main__':convert_integer()程序运行结果:C:\Python_Work>python 1_5_integer_conversion.pyOriginal: 1234 => Long host byte order: 3523477504, Network byte order: 3523477504Original: 1234 => Long host byte order: 53764, Network byte order: 53764
3、结果分析
data = 1234 #转换为二进制位0000 0100 1101 0010
工作平台为Inter X86,因此字节序为LE,如果是short型的,字节顺序为:1101 0010 0000 0100,其整型为53764;如果是long型,字节书序为1101 0010 0000 0100 0000 0000 0000 0000,其整型为3523477504。
浙公网安备 33010602011771号