關於Big-Endian/Little-Endian 位元組順序的簡單記錄

還不算暈發表於2013-11-28

一、基本概念位的概念:

在計算機中,一個0或1稱為一位(bit)。

位元組:連續的八位稱為一個位元組(Byte),位元組是計算機中可單獨處理的最小單位。
即以位元組為基本單位來解釋資訊,規定1個位元組是8個二進位制位。
通常1個ASCII碼用1個位元組存放,1個漢字用2個位元組存放,雙精度浮點實數用8個位元組存放。

二、位元組順序由來

在寫字元流時,因為字元型只佔一個位元組數,計算機只須按一個字元一個字元寫入檔案即可。
但是如果是處理整型時,由於整型佔4個位元組,所以一個整型內部的位元組儲存排列的順序直接關係到被計算機識別出來的整型值.
某種意義上也可直接理解計算機的識別順序就是所謂的位元組順序。

三、一些有關位元組順序的解釋

不同的計算機結構有時使用不同的位元組順序儲存資料。
例如,基於Intel的計算機儲存資料的順序與Macintosh(Motorola)計算機就是相反的。
Intel位元組順序稱為“Little-Endian”,反之Macintosh(Motorola),還有網路上採用標準是“Big-Endian”。
在將應用程式從一種架構型別遷移至另一種架構型別的過程中,經常會遇到位元組排列順序(endianness)問題。
位元組排列順序是資料元素及其單個位元組在記憶體中儲存和表示時的順序。

通過以上分析,會發現有兩類位元組排列順序:
big-endian (通常為網路位元組順序)和
little-endian(主機位元組順序)。
目前應該little endian是主流
下面是這些術語的解釋:
Big-Endian        最重要的位元組在整個內容的左端。
Little-Endian     最重要的位元組在整個內容的右端。
Big Endian
  低地址                                            高地址
  高位位元組                                          低位位元組
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     12     |      34    |     56      |     78    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian
  低地址                                            高地址
  低位位元組                                          高位位元組
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     78     |      56    |     34      |     12    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
對於big-endian處理器,在將字放在記憶體中時,是從最低位地址開始的,首先放入最重要的位元組。
對於little-endian處理器,如Intel處理器,首先放入的是最不重要的位元組。

四、ORACLE中通過檢視V$TRANSPORTABLE_PLATFORM檢視檢視各主機OS平臺是屬於大/小位元組序

BYS@ bys3>col PLATFORM_NAME for a40
BYS@ bys3>select PLATFORM_ID,PLATFORM_NAME from v$database;  查當前平臺的位元組情況
PLATFORM_ID PLATFORM_NAME
----------- --------------------
         10 Linux IA (32-bit)

BYS@ bys3>select * from V$TRANSPORTABLE_PLATFORM;
PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT
----------- ---------------------------------------- --------------
          1 Solaris[tm] OE (32-bit)                  Big
          2 Solaris[tm] OE (64-bit)                  Big
          7 Microsoft Windows IA (32-bit)            Little
         10 Linux IA (32-bit)                        Little
          6 AIX-Based Systems (64-bit)               Big
          3 HP-UX (64-bit)                           Big
          5 HP Tru64 UNIX                            Little
          4 HP-UX IA (64-bit)                        Big
         11 Linux IA (64-bit)                        Little
         15 HP Open VMS                              Little
          8 Microsoft Windows IA (64-bit)            Little
          9 IBM zSeries Based Linux                  Big
         13 Linux x86 64-bit                         Little
         16 Apple Mac OS                             Big
         12 Microsoft Windows x86 64-bit             Little
         17 Solaris Operating System (x86)           Little
         18 IBM Power Based Linux                    Big
         19 HP IA Open VMS                           Little
         20 Solaris Operating System (x86-64)        Little
         21 Apple Mac OS (x86-64)                    Little
20 rows selected.

相關文章