0%

字节序(endianness)

定义

引用自wiki

“Endianness refers to the sequential order in which bytes are arranged into larger numerical values when stored in memory or when transmitted over digital links”

字节序是系统存储一个整数时,字节的排列顺序。分为:Big Endian(大端),Little Endian(小端)

  • Big Endian 最高字节存在地址最低位,最低字节存在地址最高位
  • Little Endian 最低字节存在地址最低位,最高字节存在地址最高位

    注:以前总记不清,大端、小端怎么区分。是高位存在大地址,还是低位存在小地址。又是地址的大小,又是位的高低。直到今天自己读wiki才恍然大悟。计算机读写数据一定是从低地址到高地址,大端和小端的区别就是(在低地址)先存高位还是先先存地位。这么理解一下子就记住了

比如我们要在 0x0000 地址存储整数 0x12345678

address Big Endian Little Endian
0x0000 0x12 0x78
0x0001 0x34 0x56
0x0002 0x56 0x34
0x0003 0x78 0x12

比较

  • 大端,更符合人类书写逻辑。从左往右,地址依次增加,先写高位再写地位。但这个不叫优势,数据的读写都是计算机进行的,和人类没关系。
  • 大端获取一个数的符号位很方便,直接读第一个字节。
  • 小端,对于不同长度的同一个数,排列顺序一致,类型转换很方便。

其他

  • 所有的网络协议采用 Big Endian 存储,比如端口号的存储
  • 采用不同字节序机器通信时,需要考虑字节序转换的问题
  • 不同型号的CPU采用字节序不同。如Intel 的 x86 系列CPU采用 Little Endian

Reference & Thanks