我知道大字号中的0x12345678是0x12 0x34 0x56 0x78,0x78 0x56 0x34 0x12在小endian中。
但这有什么用呢?我不完全理解它是如何工作的:它看起来似乎很简单。
它真的像字节顺序一样简单;没有其他区别吗?
发布于 2014-08-02 18:01:02
你对恩典的理解似乎是正确的。
我还想进一步指出endianness的隐含、常规性质及其在将字节序列解释为某些预期值方面的作用。
大端的
0x12345678是小endian的0x12 0x34 0x56 0x78和0x78 0x56 0x34 0x12。
有趣的是,您没有明确说明上面这些0x…实体的含义。大多数熟悉C风格语言的程序员可能会将0x12345678解释为十六进制形式的数字值,而0x12 0x34 0x56 0x78和0x78 0x56 0x34 0x12则可能解释为字节序列(每个字节以十六进制形式表示,而最左边的字节位于最低的内存地址)。这可能就是你的意思。
也许,您甚至没有考虑过,您已经依赖于一个众所周知的约定(即假设您的目标受众将应用与您相同的常识)来传达这些0x…实体的含义。
Endianness非常类似于此:定义给定计算机体系结构、数据传输协议、文件格式等的规则,如何在值与其表示为字节序列之间进行转换。Endianness通常是隐含的:就像您不必显式地告诉我们0x12345678的含义一样,通常不需要在每个字节序列(如0x12 0x34 0x56 0x78 )的后面加上明确的指令,说明如何将其转换为多字节值,因为知识( endianness)是内置于或定义在特定的计算机体系结构、文件格式、数据传输协议等中的。
至于何时需要endianness :基本上对于值不适合于单个字节的所有数据类型而言。这是因为从概念上说,计算机内存是一个由插槽组成的线性数组,每个插槽的容量为8位(一个八进制或字节)。因此,表示需要8位以上的数据类型的值必须分布在几个时隙上;这就是字节顺序的重要性所在。
P.S.:研究Unicode字符编码UTF-16和UTF-8有助于我更深入地理解endianness。
一旦你理解了其中的原因,你很可能就能很好地理解宿醉的问题。
发布于 2014-08-02 16:32:05
看来你对恩典的理解还不错。
由于在线性地址空间中表示多字节数据类型的值有多个可能的字节排序,因此不同的CPU /计算机制造商在过去显然选择了不同的字节顺序。因此,我们今天有“大号”和“小终端”(也许还有其他没有自己名字的字节顺序)。
维基百科在这个问题上有一个很好的文章。
https://stackoverflow.com/questions/25097101
复制相似问题