• 网络数据的大小端问题

    不同 CPU 中,4 字节整数 1 在内存空间的存储方式是不同的。4 字节整数 1 可用 2 进制表示如下:

    00000000 00000000 00000000 00000001

    有些 CPU 以上面的顺序存储到内存,另外一些 CPU 则以倒序存储,如下所示:

    00000001 00000000 00000000 00000000

    若不考虑这些就收发数据会发生问题,因为保存顺序的不同意味着对接收数据的解析顺序也不同。

    大端序和小端序

    CPU 向内存保存数据的方式有两种:

    • 大端序(Big Endian):高位字节存放到低位地址(高位字节在前)。
    • 小端序(Little Endian):高位字节存放到高位地址(低位字节在前)。

    仅凭描述很难解释清楚,不妨来看一个实例。假设在 0x20 号开始的地址中保存 4 字节 int 型数据 0x12345678,大端序 CPU 保存方式如下图所示:

    整数 0x12345678 的大端序字节表示
    图1:整数 0x12345678 的大端序字节表示

更多...

加载中...