big_endian和little_endian的說明(轉載)
big_endian 、little_endian 用於自動改變二進位制位存放順序 Big Endian and Little Endian 談到位元組序的問題,必然牽涉到兩大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列採用big endian方式儲存資料,而x86系列則採用little endian方式儲存資料。那麼究竟什麼是big endian,什麼又是little endian呢? 其實big endian是指低地址存放最高有效位元組(MSB),而little endian則是低地址存放最低有效位元組(LSB)。 用文字說明可能比較抽象,下面用影像加以說明。比如數字0x12345678在兩種不同位元組序CPU中的儲存順序如下所示: Big Endian 低地址 高地址 -----------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 12 | 34 | 56 | 78 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Little Endian 低地址 高地址 -----------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 78 | 56 | 34 | 12 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 從上面兩圖可以看出,採用big endian方式儲存資料是符合我們人類的思維習慣的。而little endian,!@#$%^&*,見鬼去吧 -_-||| 為什麼要注意位元組序的問題呢?你可能這麼問。當然,如果你寫的程式只在單機環境下面執行,並且不和別人的程式打交道,那麼你完全可以忽略位元組序的存在。但是,如果你的程式要跟別人的程式產生互動呢?尤其是當你把你在微機上運算的結果運用到計算機群上去的話。在這裡我想說說兩種語言。C/C++語言編寫的程式裡資料儲存順序是跟編譯平臺所在的CPU相關的,而JAVA編寫的程式則唯一採用big endian方式來儲存資料。試想,如果你用C/C++語言在x86平臺下編寫的程式跟別人的JAVA程式互通時會產生什麼結果?就拿上面的0x12345678來說,你的程式傳遞給別人的一個資料,將指向0x12345678的指標傳給了JAVA程式,由於JAVA採取big endian方式儲存資料,很自然的它會將你的資料翻譯為0x78563412。什麼?竟然變成另外一個數字了?是的,就是這種後果。因此,在你的C程式傳給JAVA程式之前有必要進行位元組序的轉換工作。 無獨有偶,所有網路協議也都是採用big endian的方式來傳輸資料的。所以有時我們也會把big endian方式稱之為網路位元組序。當兩臺採用不同位元組序的主機通訊時,在傳送資料之前都必須經過位元組序的轉換成為網路位元組序後再進行傳輸。ANSI C中提供了下面四個轉換位元組序的宏。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12059843/viewspace-1004440/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Little_endian和Big_endian的區別和C測試程式
- 轉載:__builtin_expect 說明UI
- 【轉載】ArcGIS中topolopy說明
- 【轉載】UEditor前端配置項說明前端
- 關於SmartForm和ScriptForm的輸出格式設定說明(轉載)ORM
- PetShop4.0 架構說明(轉載)架構
- 成員函式的說明和使用(轉)函式
- 轉換說明
- Emacs 的 info 使用說明(轉)Mac
- (轉)計劃任務工具 cron 的配置和說明
- 【轉載】聰明,和智慧--職場智慧
- oracle程式和記憶體轉儲說明Oracle記憶體
- ORACLE event和說明Oracle
- pureftpd安裝配置簡明說明 (轉)FTP
- Nginx負載均衡配置說明Nginx負載
- Fedora&Redhat下載資源及相關說明(轉)Redhat
- 轉載經典文章 buffer busy wait 等待事件說明AI事件
- (轉)Oracle Logminer 說明Oracle
- WINDOWS訊息說明 (轉)Windows
- Webots和ROS的使用說明(譯)WebROS
- session的詳細說明和用法Session
- Oracle Audit 功能的使用和說明Oracle
- 關於DOCTYPE的使用和說明
- session和v$session說明Session
- Oracle rdba和 dba 說明Oracle
- (轉)oracle dump block格式說明OracleBloC
- Emacs簡易操作說明(轉)Mac
- Emacs詳細使用說明(轉)Mac
- latch free 等待事件說明(轉)事件
- 核心FAQ 舉例說明 (轉)
- Object TreeView簡要說明 (轉)ObjectView
- Apache 配置檔案說明(轉)Apache
- 軟體需求說明書 (轉)
- DFL自動虛擬載入的使用說明
- 軟體需求說明的前世和今生
- LOCAL_LISTENER 和 REMOTE_LISTENER說明 ——轉自chinaunixREM
- 有關RFC文件的翻譯說明 (轉)
- hyperion模組分類說明及下載