什么是Big Endian和Little Endian?

以下是一些要点帮助理解:

1. Big/Little Endian主要指的是字节在内存中的顺序。注意是针对字节(Byte) 的。对于一个字节内的位(Bit)来说,没有Big/Little Endian的说法。非要有个说法的话,bit在byte里面还是按Big Endian的习惯表达的。


2. 什么是Big Endian 或者 Little Endian呢?

下面简单小举一例,即可阐明。假设有一个数12345,按读者习惯的话,从左到右看它,1是这个数字的最高位。现在要把它弄到内存里去,假设每个数字1到5,分别使用一个byte。

a) 那么按Big Endian的方式,从内存的地址由低到高,这个数字在内存里面仍然是按照12345的顺序。

b) 反之如果是按Little Endian的方式,从内存的地址有低到高,这个数字就被存成54321的样子了。

3. why are they exsited & impact?

使用Big Endian的主:

a) IBM's 370 mainframes, most RISC-based computers, and Motorola microprocessors use the big-endian approach.

b) TCP/IP also uses the big-endian approach (and thus big-endian is sometimes called network order).

c) Java Language

使用Little Endian的主:

a) Intel processors (CPUs) and DEC Alphas and at least some programs that run on them are little-endian

所以在实际使用中要注意如果是在不同机器上传数据的话,要有意识是不是要作Big Endian到Little Endian的转换。更具体一点,例如在C/C++ 语言编写的程序里,数据存储顺序是跟编译平台所在的CPU 相关的;JAVA 编写的程序则唯一采用Big Endian。 如果用C/C++ 语言在x86 平台下编写的程序跟JAVA 程序互通的时候,就要进行必要的字节序转换工作。

猜你喜欢

转载自kingsword.iteye.com/blog/1164622
今日推荐