Big Endian和Little Endian Byte顺序之间的区别

web*_*nia 62 unicode utf-16 endianness

Big Endian和Little Endian Byte命令有什么区别?

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

Fer*_*yer 114

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

Byte Index:      0  1
---------------------
Big-Endian:     12 34
Little-Endian:  34 12
Run Code Online (Sandbox Code Playgroud)

为了确定文本是使用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
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请阅读Endianness和/或UTF-16的Wikipedia页面.

  • 链接已损坏@bvj,此有效:https://www.cs.umd.edu/~meesh/cmsc311/clin-cmsc311/Lectures/lecture6/endian.htm (2认同)

Mih*_*ita 31

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

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字节上表示,因此字节的顺序遵循该平台上任何数字所遵循的顺序.


joe*_*oev 7

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

维基百科有更完整的解释.

  • 无论底层硬件如何,您都可以按字节顺序存储UTF-16编码文件. (7认同)

Pau*_*ers 5

小尾数法:adj.

\n\n

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

\n\n

big-endian:形容词。

\n\n

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

\n\n

描述一种计算机体系结构,其中在给定的多字节数字表示形式中,最高有效字节具有最低地址(该字存储为 \xe2\x80\x98big-end-first\xe2\x80\x99)。大多数处理器,包括 IBM 370 系列、PDP-10、Motorola 微处理器系列以及大多数各种 RISC 设计都是大端字节序。大端字节顺序有时也称为网络顺序。

\n\n

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

\n