大 Endian 字节序与小 Endian 字节序的区别

大 Endian 字节序和小 Endian 字节序有什么区别?

这两者似乎都与 Unicode 和 UTF16有关。我们到底在哪里使用它?

95489 次浏览

Big-Endian (BE)/Little-Endian (LE)是组织多字节单词的两种方法。例如,当使用两个字节表示 UTF-16中的一个字符时,有两种方法可以将字符 0x1234表示为一个字节字符串(0x00-0xFF) :

Byte Index:      0  1
---------------------
Big-Endian:     12 34
Little-Endian:  34 12

为了决定文本是使用 UTF-16BE 还是 UTF-16LE,规范建议在字符串前面加上一个 字节顺序标记(BOM) ,表示字符 U + FEFF。因此,如果 UTF-16编码的文本文件的前两个字节是 FEFF,则编码是 UTF-16BE。对于 FFFE,它是 UTF-16LE。

一个可视化示例: 不同编码中的单词“示例”(UTF-16和 BOM) :

Byte Index:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
------------------------------------------------------------
ASCII:       45 78 61 6d 70 6c 65
UTF-16BE:    FE FF 00 45 00 78 00 61 00 6d 00 70 00 6c 00 65
UTF-16LE:    FF FE 45 00 78 00 61 00 6d 00 70 00 6c 00 65 00

如需进一步资料,请参阅维基百科 Endianness及/或 UTF-16

UTF-16将 Unicode 编码为16位值。大多数现代文件系统的操作都是8位字节。例如,要将 UTF-16编码的文件保存到磁盘,您必须决定16位值的哪一部分放在第一个字节中,哪一部分放在第二个字节中。

Wikipedia 有更完整的解释。

字节 endianness (大或小)需要为 Unicode/UTF-16编码指定,因为对于使用多于一个字节的字符代码,可以选择是先读/写 最重要的字节还是最后读/写。Unicode/UTF-16,因为它们是可变长度的编码(即每个字符可以用一个或几个字节表示) ,所以需要指定这一点。(不过要注意,UTF-8“ words”的长度总是8位/1字节(尽管字符可以是多个点) ,因此 endianness 没有问题。)如果表示 Unicode 文本的字节流的编码器和解码器没有就使用哪种约定达成一致,则可能会解释错误的字符代码。出于这个原因,要么事先已经知道 endianness 的惯例,要么通常在任何 Unicode 文本文件/流的开头指定 字节顺序标记字节顺序标记,以指示使用的是大的还是小的 endian 顺序。

费迪南德(以及其他人)的回答是正确的,但并不完整。

Big Endian (BE)/Little Endian (LE)与 UTF-16或 UTF-32无关。 它们早在 Unicode 之前就存在了,并且影响了数字的字节如何存储在计算机的内存中。它们依赖于处理器。

如果您有一个值为 0x12345678的数字,那么在内存中它将被表示为 12 34 56 78(BE)或 78 56 34 12(LE)。

UTF-16和 UTF-32恰好分别以2个4字节表示,因此字节的顺序与平台上任何数字遵循的顺序相关。

小结,小结。

描述一种计算机体系结构,其中,在给定的16位或32位字中,位于较低地址的字节的重要性较低(该字存储为“ little-end-first”)。PDP-11和 VAX 系列的计算机和英特尔微处理器列表以及许多通信和网络硬件都是小端的。这个术语有时用于描述字节以外的单位的排序; 通常是指字节内的位。

形容词。

[共同; 摘自斯威夫特的《格列佛游记》 ,通过丹尼 · 科恩的著名论文《论圣战与和平的请求》 ,USC/ISI IEN 137,日期1980年4月1日]

描述一种计算机体系结构,在给定的多字节数值表示中,最高有效字节具有最低地址(单词存储为“大端优先”)。大多数处理器,包括 IBM 370系列、 PDP-10、摩托罗拉微处理器系列和大多数各种 RISC 设计都是大端处理器。大端字节顺序有时也称为网络顺序。

来自行话档案: http://catb.org/~esr/jargon/html/index.html

大端和小端是描述字节序列在计算机内存中存储的顺序的术语。

  1. Big-endian 是首先存储“大端”(序列中最重要的值)(在最低存储地址)的顺序。
  2. Little-endian 是首先存储“ little end”(序列中最小有效值)的顺序。

比如说

在大端计算机中,十六进制数 4F52所需的两个字节将作为 4F52存储在存储 (if 4F is stored at storage address 1000, for example, 52 will be at address 1001).

在 little-endian 系统中,它将被存储为 524F (52 at address 1000, 4F at 1001).