字节序是指多字节数据在计算机内存中存储或在网络传输时各字节的存储顺序。
常见字节序有:littile-dienan和big-endian。
littile-endian,将低序字节存储在起始地址(符合人的思维);big-endian,将高序字节存储在起始地址(更直观)。
例如:short s = 0xcdfe;变量s在内存中占2个字节,littile-dienan的存储顺序是fe、cd,big-endian的存储顺序是cd、fe。
网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的cpu类型、操作系统无关,从而保证数据在不同主机间传输是能够被正确解释。网络字节序采用big-endian排序方式。
BSD socket提供的相互转换函数:htons、htonl、ntohs、ntohl。使用littile-endian的主机系统中这些函数会把字节进行转换,使用big-edian的主机系统中这些函数会被定义成空宏。
BIG-ENDIAN、LITTLE-ENDIAN跟CPU有关,每一种CPU不是BIG-ENDIAN就是LITTLE-ENDIAN、。IA架构(Intel、AMD)的CPU中是Little-Endian,而PowerPC 、SPARC和Motorola处理器是Big-Endian。这其实就是所谓的主机字节序。而网络字节序是指数据在网络上传输时是大头还是小头的,在Internet的网络字节序是BIG-ENDIAN。所谓的JAVA字节序指的是在JAVA虚拟机中多字节类型数据的存放顺序,JAVA字节序也是BIG-ENDIAN。