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编码文本文件的前两个字节是FE
, FF
,则编码是UTF-16BE。 对于FF
, FE
,它是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的开始处指定一个字节顺序标记,以指示正在使用大的还是小的顺序。