不太了解Endianness

时间:2014-08-02 16:25:42

标签: endianness

我了解大端的0x123456780x12 0x34 0x56 0x780x78 0x56 0x34 0x12为小端。

但这需要什么?我不完全理解它是如何工作的:它似乎看似简单。

它真的像字节顺序一样简单;没有其他区别?

2 个答案:

答案 0 :(得分:1)

看来你对字节序的理解还不错。

由于在线性地址空间中有多个可能的字节顺序用于表示多字节数据类型的值,因此不同的CPU /计算机制造商过去显然选择了不同的字节顺序。因此,今天我们有Big和Little Endian(也许还有其他没有自己名字的字节顺序)。

维基百科对此事有很好的article,顺便说一句。

答案 1 :(得分:0)

您对字节序的理解似乎是正确的。

我还想指出字节顺序的隐含的,传统的本质及其在将字节序列解释为某些预期值时的作用。

  大端的

0x123456780x12 0x34 0x56 0x780x78 0x56 0x34 0x12为小端。

有趣的是,您没有明确陈述上述0x…个实体应该是什么意思。熟悉C风格语言的大多数程序员可能解释 0x12345678为十六进制形式的数值,0x12 0x34 0x56 0x780x78 0x56 0x34 0x12为字节序列(其中每个字节以十六进制形式表示,最左侧字节位于最低存储器地址)。这可能就是你的意思。

也许甚至没有思考,你依靠一个众所周知的惯例(即假设你的目标受众将应用与你相同的常识)来传达这些0x…实体的意义。

字节顺序非常类似于:为给定的计算机体系结构,数据传输协议,文件格式等定义的规则如何在值和其表示之间转换为字节序列。字节顺序通常是暗示的:正如您不必明确告诉我们0x12345678的含义一样,通常没有必要将每个字节序列(例如0x12 0x34 0x56 0x78)与明确指示一起如何将其转换回来到多字节值,因为该知识(字节顺序)内置于或定义在特定的计算机体系结构,文件格式,数据传输协议等中。

关于何时需要字节序:基本上适用于其值不适合单个字节的所有数据类型。这是因为计算机存储器在概念上是一个线性时隙阵列,每个时隙具有8位(八位位组或字节)的容量。因此,表示需要超过8位的数据类型的值必须分布在几个插槽中;这就是字节顺序的重要性所在。

P.S。:研究Unicode字符编码UTF-16和UTF-8帮助我更好地理解了字节顺序。

  • 虽然两种编码都是针对完全相同类型的数据,但字节顺序仅在UTF-16中起作用,但在UTF-8中不起作用。怎么可能?

  • UTF-16需要字节顺序标记(BOM),而UTF-8则不需要。为什么呢?

一旦了解了原因,您就很有可能对字节序问题有很好的理解。