Big Endian和Little Endian Byte订单有什么区别?

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

有帮助吗?

解决方案

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编码文本文件的前两个字节是 FE, FF, ,编码是UTF-16BE。为了 FF, FE, ,是UTF-16LE。

一个视觉示例:不同编码中的“示例”一词(带有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

有关更多信息,请阅读Wikipedia页面 尼迪亚人 和/或 UTF-16.

其他提示

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

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个字节上分别表示,因此字节的顺序尊重该平台上任何数字遵循的顺序。

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

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

小阶:adj。

描述了一个计算机架构,在给定的16或32位单词中,较低地址的字节具有较低的意义(单词存储了“小末端”)。 PDP-11和计算机和英特尔微处理器的VAX家族以及许多通信和网络硬件很小。该术语有时用于描述除字节以外的单位的排序;最常见的是字节内的位。

大型:adj。

常见的;从斯威夫特的格列佛(Swift)通过有关圣战的著名论文的旅行,以及丹尼·科恩(Danny Cohen)的恳求,南加州大学/ISI IEN 137,日期为1980年4月1日,

描述了一个计算机体系结构,在该计算机架构中,在给定的多字节数字表示中,最重要的字节具有最低的地址(单词存储了“大端优先”)。大多数处理器,包括IBM 370家族,PDP-10,摩托罗拉微处理器家族以及大多数RISC设计中的大多数都是大型的。大型字节订单有时也称为网络顺序。

---从行话文件中: http://catb.org/~esr/jargon/html/index.html

Big-endian和Little-endian是描述一个字节序列存储在计算机内存中的顺序。

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).

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

字节端 (大小)需要为Unicode/utf-16编码指定,因为对于使用多个字节的字符代码,是否可以选择是否读/写 最重要的字节 第一或最后。 unicode/utf-16,因为它们是可变长度编码(即每个char可以由一个或几个字节表示),因此需要指定此字节。 (但是,请注意,UTF-8“单词”始终是8位/一个字节长度(尽管字符可能是多个点),因此,Endianness没有问题。)如果代表Unicode文本的字节流的编码器,则解码器不同意使用哪个惯例,可以解释错误的字符代码。因此,要么是事先知道的,要么是 字节订单标记 通常在任何Unicode文本文件/流的开头指定,以指示正在使用大型或小的Endian订单。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top