计算机世界中,有两种字节顺序:Big Endian(大端字节序), Little Endian(小端字节序)。两者的区别即在于:整个字节序中,MSB(most significant bit/byte,最为重要的位/字节)与LSB(least significant bit/byte,最不重要的位/字节),哪个排在前面,哪个排在后面。比如:以十六表示的整数0x32D687FA,其中0x32 就是MSB,而0xFA 就是LSB。
大端字节序,就是指MSB 排在最前,LSB 排在最后,这种字节序,主要用在网络(net)传输及Mac 机器上;小端字节序则相反,它主要用在Intel X86 系列主机(host)上。因此,在PC 上,整数0x32D687FA 的排列顺序是:0xFA 0x87 0xD6 0x32。
当在两种不同字节序的系统中传递数据时,字节的转换是必不可少的。有四个函数用于这两种字节序的转换,分别是:
htons
ntohs
htonl
ntohl
其中h,可以理解成host;n 可以理解成net;s 可以理解成short,这里实际指16 位数据的转换;l,可以理解成long,表示32 位数据。