字节序是指多字节数据计算机内存中存储或者网络传输时各字节的存储顺序。

    1. Little endian(小端字节序):将低序字节存储在起始地址
    2. Big endian(大端字节序):将高序字节存储在起始地址
    LE little-endian
    最符合人的思维的字节序,地址低位存储值的低位,地址高位存储值的高位
    怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位
    反之,高位值就应该放在内存地址大的地方,也即内存地址高位
    BE big-endian
    最直观的字节序,地址低位存储值的高位,地址高位存储值的低位
    为什么说直观,不要考虑对应关系,只需要把内存地址从左到右按照由低到高的顺序写出把值按照通常的高位到低位的顺序写出
    两者对照,一个字节一个字节的填充进去

    如: 一个多字节值 0xFECDBA98,内存从地址100开始存放
    大端字节序: FE 对应地址100 | CD 对应地址 101 | BA 对应地址 102 | 98 对应地址 103
    小端字节序: 89ABDCEF ——>;
    注意,我们的书写字数据表示法是从高字节位—->低字节位(从左到右)
    内存地址生长方向为: 从左到右 由低到高(这是不变的)
    数据为: 0x98BACDFE

    网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。

    字节转换函数
    在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端,高字节在高端,而alpha芯片却相反. 为了统一起来,在Linux下面,有专门的字节转换函数.
    unsigned long int htonl(unsigned long int hostlong)
    unsigned short int htons(unisgned short int hostshort)
    unsigned long int ntohl(unsigned long int netlong)
    unsigned short int ntohs(unsigned short int netshort)
    在这四个转换函数中,h 代表host, n 代表 network.s 代表short l 代表long
    第一个函数的意义是将本机器上的long数据转化为网络上的long. 其他几个函数的意义类似。