Big Endian和Little Endian字节顺序的区别

Big Endian和Little Endian字节顺序有什么区别?

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

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

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

为了确定文本是使用UTF-16BE还是UTF-16LE,规范build议在string前加一个字节顺序标记 (BOM),代表字符U + FEFF。 所以,如果UTF-16编码文本文件的前两个字节是FEFF ,则编码是UTF-16BE。 对于FFFE ,它是UTF-16LE。

一个可视化的例子:不同编码的单词“Example”(带有BOM的UTF-16):

 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的Wikipedia页面。

费迪南德的答案(和其他人)是正确的,但不完整。

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字节,所以字节的顺序方面是任何数字在该平台上的顺序。

UTF-16将Unicode编码为16位值。 大多数现代文件系统在8位字节上运行。 因此,例如,要将UTF-16编码的文件保存到磁盘,必须确定16位值的哪一部分在第一个字节中进入,而哪一部分进入第二个字节。

维基百科有一个更完整的解释。

little-endian:adj。

描述一种计算机体系结构,其中在给定的16或32位字中,较低地址处的字节具有较低的重要性(该字以“小头一先”存储)。 计算机和Intel微处理器的PDP-11和VAX系列以及大量的通信和networking硬件都是小端的。 该术语有时用于描述字节以外的单位的sorting; 通常是一个字节内的位。

big-endian:adj。

[共同; 从斯威夫特的格列佛游记,1980年4月1日的USC / ISI IEN137通过着名的论文“圣战”和丹尼·科恩的和平诉求]

描述一种计算机体系结构,其中在给定的多字节数字表示中,最高有效字节具有最低地址(该字被存储为“大端优先”)。 包括IBM 370系列,PDP-10,Motorola微处理器系列以及大多数RISCdevise在内的大多数处理器都是高端的。 大端字节顺序有时也被称为networking顺序。

—从Jargon文件: http : //catb.org/~esr/jargon/html/index.html

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

1.大端(big-endian)是指首先存储“大端”(序列中最重要的值)(在最低存储地址)的顺序。

2.小​​尾数是指“小端”(序列中最小有效值)首先被存储的顺序。

例如

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

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

需要为Unicode / UTF-16编码指定字节的字节序 (大或小),因为对于使用多个字节的字符代码,可以select是读/写最重要的字节的第一个还是最后一个。 Unicode / UTF-16,因为它们是可变长度的编码(即每个字符可以用一个或几个字节来表示),所以需要指定这个编码。 (请注意,UTF-8“字”总是8位/一个字节的长度(尽pipe字符可以是多个点),因此,字节顺序没有问题。)如果表示Unicode文本的字节stream的编码器和解码器不同意正在使用哪种约定,可以解释错误的字符码。 由于这个原因,预先知道字节序的约定,或者通常在任何Unicode文本文件/stream的开始处指定一个字节顺序标记,以指示正在使用大的还是小的顺序。