little-endian and big-endian

这是指数据在存储空间中方置的时候,怎么样放置字节的问题。这个是和所用PC的架构和操作系统有关的。

常见的架构和操作系统以及他们都是用什么呢?

一般来说对于CPU的架构中,intel x86使用Little-endian,而motorola系列的CPU 特指PowerPC系列使用的是Big-endian. ARM则是两者都支持,但是默认是little-endian,linux平台也是这样的。MAC则是用BIG-endian 。

c/c++ 是little-endian ,java是big-endian,所以进行这两种之间数据传送的时候要进行转换。

所谓的little-endian and big-endian指的是什么?

首先一个数区分最高有效字节MSB,最低有效字节LSB我们所看到的,例如0x12345678,前面的0x12..  指MSB,后面的0x..78指LSB

big endian是指低地址存放MSB,little endian则是低地址存放LSB。或者简单说,  big-endian指高位放低地址上,而little-endian指低位放低地址上。

big-endian是指big end first,  也就是先放大数,或者先放高进制的数。

if the base address is 0x1000, the data is placed as

address           little-endian                       big-endian

0x1000                  78h                                           12h 

0x1001                  56h                                           34h

0x1002                  34h                                           56h

0x1003                  12h                                           78h 

注意这里最小的单元是字节,所以在big-endian里看起来就和打印的顺序一样的,但即使在little-endian 里,也不是完全的反过来,而是按照字节反过来,所以不会出现某个字节变成21h这样的数字的。

同时这里的顺序指的是在一个word或Dword中的排序问题,一个word是16位的,DWORD 32-bit。对于多于一个DWORD的多字节数据,仍然是按照先后顺序来放的。比如一个64位的数据0x1122334455667788,在little-endian中的顺序是0x44 0x33 0x22 0x11 0x88 0x77 0x66 0x55。(待查证)

历史来源是什么?

“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱。大致原因是传统上是按照大头敲开的,但是某个国王的祖父按照传统打开鸡蛋的时候伤了手指,所以国王就下令所有人都要用小头敲开鸡蛋,但是有人不同意,就发生了叛乱。

优点和缺点是什么?

little-endian里,offset 0 的地方放的是byte0,这样在放数的时候比较清楚,对于汇编语言来说比较容易取数。

big-endian和我们的打印顺序一致,方便进行二进制和10进制的转换;同时最高位在最前面,所以可以很容易判断这个数的正负。

对于一些特殊的应用,就要注意他们本身是什么格式的。如bmp 文件就是little-endian的

Common file formats and their endian order are as follows:

  • Adobe Photoshop -- Big Endian
  • BMP (Windows and OS/2 Bitmaps) -- Little Endian
  • DXF (AutoCad) -- Variable
  • GIF -- Little Endian
  • IMG (GEM Raster) -- Big Endian
  • JPEG -- Big Endian
  • FLI (Autodesk Animator) -- Little Endian
  • MacPaint -- Big Endian
  • PCX (PC Paintbrush) -- Little Endian
  • PostScript -- Not Applicable (text!)
  • POV (Persistence of Vision ray-tracer) -- Not Applicable (text!)
  • QTM (Quicktime Movies) -- Little Endian (on a Mac!)
  • Microsoft RIFF (.WAV & .AVI) -- Both
  • Microsoft RTF (Rich Text Format) -- Little Endian
  • SGI (Silicon Graphics) -- Big Endian
  • Sun Raster -- Big Endian
  • TGA (Targa) -- Little Endian
  • TIFF -- Both, Endian identifier encoded into file
  • WPG (WordPerfect Graphics Metafile) -- Big Endian (on a PC!)
  • XWD (X Window Dump) -- Both, Endian identifier encoded into file

reference:

http://en.wikipedia.org/wiki/Endianness

http://www.cppblog.com/future0906/archive/2005/11/19/1193.html

你可能感兴趣的:(File,Microsoft,reference,Motorola,postscript,tiff)