字节序

字节序

字节的顺序。一个16位(两字节)整数有高8位和低8位,比如 使用2个字节表示一个整数4 ,有的系统会将4表示成:00000000  00000100 ,高8位在前,低8位在后,称为大端字节序;有的系统会将4表示成:00000100  00000000,低8位在前,高8位在后,称为小端字节序;

主机字节序

整数在内存中保存的字节顺序,所有的32位系统都是小端字节序,Intel和AMD的64位系统也是小端字节序

网络字节序

TCP/IP中规定好的一种数据表示格式,与具体的CPU类型、操作系统无关,从而保证数据在不同的主机之间传输时能够正确的解析。网络字节序采用大端表示

查看系统是大端还是小端 

我们可以通过python模块 struct.pack 将一个整数转换位十六进制,通过字节序的定义判断自己的系统时大端还是小端字节序

可以看出我的系统是小端字节序

如果两个主机要传输数据,主机A要给主机B发数据,那么主机A应该将数据按大端表示,然后通过网络传输,主机B接收到网络字节流后,直接按大端解析,这样就不会出错了。

字节序转换

有的时候我们会在网络字节序和主机字节序中进行转换,python的socket模块提供了4中转换方法:

htons 把unsigned short类型从主机序转换到网络序
htonl 把unsigned long类型从主机序转换到网络序
ntohs 把unsigned short类型从网络序转换到主机序
ntohl 把unsigned long类型从网络序转换到主机序

 

posted @ 2018-06-29 10:34  持&恒  阅读(220)  评论(0编辑  收藏  举报