1、在使用网络进行程序设计中会碰到的一个问题是字节序的问题。0在使用网络进行程序设计中会碰到的一个问题是字节序的问题。这种问题在基于单机或者同类型机器进行开发的过程中很少遇到。1由于网络的特点是将Internet上不同的网络设备和主机进行连接和通信,这决定了使用网络进行开发的程序特点就是要兼容各种类型的设备,其中的数据在不同的设备上要有唯一的含义。2字节序的问题是上述情况下的典型问题。3字节序的含义:4字节序的含义:字节序的问题是由于CPU对整数在内存中的存放方式造成的。5字节序的含义:字节序的问题是由于CPU对整数在内存中的存放方式造成的。字节数大于一的数据类型在内存中的存放顺序叫主机字节序。6
2、最常见的字节序有两种,小端字节序和大端字节序。7最常见的字节序有两种,小端字节序和大端字节序。小端字节序:即Little Endian,简称LE,将数据的最低字节放在内存的起始位置。8小端字节序的特点是内存地址较低的为存放数据的低位,内存地址高的位存放数据的高位。采用低字节序的CPU有x86架构的Intel系列产品。9小端字节序的特点是内存地址较低的为存放数据的低位,内存地址高的位存放数据的高位。采用低字节序的CPU有x86架构的Intel系列产品。大端字节序:即Big Endian,简称BE,将数据的高字节放在内存的起始位置。10大端字节序的特点是内存中低字节位置存放数据的高位字节,内存中的
3、高位字节存放数据的较低字节数据。采用大端字节序的典型代表有PowerPC的UNIX系统。11例如对于一个8字节的数据0 x12345678,假设在内存中存放的开始地址为0 x1000,则在小端字节序和大端字节序系统中的存放方式如下表所示;12例如对于一个8字节的数据0 x12345678,假设在内存中存放的开始地址为0 x1000,则在小端字节序和大端字节序系统中的存放方式如下表所示;13内存地址内存地址0 x10000 x10000 x10010 x10010 x10020 x10020 x10030 x1003小端字节序0 x780 x560 x340 x12大端字节序0 x120 x34
4、0 x560 x78系统对多字节数据的不同存放方法造成了使用方法的问题。14系统对多字节数据的不同存放方法造成了使用方法的问题。例如:在x86系统主机A上的一个值为0 x12345678,数据通过网络传送到了PowerPC上的一个运行UNIX的主机B上,在主机B上此值解释为0 x7654321。15我们看到,经网络在不同的软硬件系统之间传输后,收到的数据与原来迥异,这样就造成了传输上兼容性方面的困难。16网络字节序的转换17网络字节序的转换网络的字节序标准规定为大端字节序,不同平台上会对主机字节序进行转换,成为网络字节序后再进行传输,到主机后在转化为主机字节序,数据的传输就不会产生问题了。18
5、同一个数据在不同平台上的字节序可以使用网络字节序的转换函数来实现。19同一个数据在不同平台上的字节序可以使用网络字节序的转换函数来实现。如下图所示为主机A中的应用程序将变量a中的值0 x12345678,通过网络传递给主机B中的应用程序的变量b,如果不进行网络字节转换,b的值为0 x7856341220 21如下图所示,如果进行了网络字节序转换,a的值与b的值均为0 x1234567822 23小结:网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用大端字节序的排序方式。24不同的CPU上运行不同的操作系统,字节序也是不同的。因此在数据传输前,不同平台上会对主机字节序进行转化,成为网络字节序后在进行传送。25