网络字节序之理解

来源:互联网 发布:org.apache.tools pom 编辑:程序博客网 时间:2024/06/09 19:58

1.字节

      字节是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制。在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。

      例如,一部电影内存是3G个字节(3GB),一首歌是3M个字节(3MB)。

2.字节序

      我们常常采用多个字节来存储信息。比如,这里我们存储两个整数共占4个字节,其用十六进制来表示(0x11223344和0x55667788)。通常常用的两种存储方式:

把数据的高位存在低地址:                          

0x11

0x22

0x33

0x44

0x55

0x66

0x77

0x88

把数据的低位存在低地址:  

0x44

0x33

0x22

0x11

0x88

0x77

0x66

0x55

      前者使用的是“大端(Big endian)”字节序,即先存高位的那一端(两个数字的最高位分别是0x12、0x11),如上图中的第二个图;后者使用的是“小端(Little endian)”字节序,即先存低位的那一端(两个数字的最低位分别是0x78、0x44),如上图中的第一个图;

不同厂商差异:

·  x86MOS Technology 6502Z80VAXPDP-11等处理器为小端。

·  Motorola6800Motorola 68000PowerPC 970System/370SPARC(除V9外)等处理器为大端。

·  ARM,PowerPC (PowerPC 970), DEC Alpha, SPARC V9,MIPS, PA-RISC and IA64的字节序是可配置的。

3.网络字节序

       我们把计算机本身采用的不管是大端或者小端的存储数据的方式,称为主机字节序。这里计算机自身采用的字节序没有任何问题,但涉及不同的计算机进行通信时,必须统一标准。

       TCP/IP协议中RFC1700规定使用“大端”字节序为网络字节序,其他不使用大端的计算机发送数据的时候必须要将自己的主机字节序转换为网络字节序(即“大端”字节序),接收到的数据再转换为自己的主机字节序。这样就与CPU、操作系统无关了,实现了网络通信的标准化。


0 0
原创粉丝点击