一、网络字节序与主机字节序
在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。
1、字节序
字节序,顾名思义,指字节(Byte)在内存中存储的顺序。比如一个int32_t类型的数值占用4个字节,这4个字节在内存中的排列顺序就是字节序。
字节序有两种:
(1)小端字节序(Little endian),数值低位存储在内存的低地址,高位存储在内存的高地址;(记:低对低,高对高)
(2)大端字节序(Big endian),数值高位存储在内存的低地址,低位存储在内存的高地址。(记:反着的,低对高,高对低)
下图是位宽为32的数值0x12345678为例(说明:十六进制数<---->二进制数是一位对四位的关系),表示小端字节序与大端字节序具体的存储区别如下所示:
2、主机字节序和网络字节序
主机字节序,即CPU存储数据时采用的字节顺序。不同的CPU设计时采用的字节序是不同的ÿ