Big Endian与Little Endian区别
author:skate
time :2010/03/05
?
Big Endian與Little Endian區別
?
1. 什么是Big Endian和Little Endian?
?
在設計計算機系統的時候,有兩種處理內存中數據的方法。一種叫為little-endian,存放在內存中最低位的數值是來自數據的
最右邊部分(也就是數據的最低位部分)。比如一個16進制數字0x12345678,在內存存放的方式如下:
?
?????? 低地址 ------------------> 高地址
?????? ####################################################
值??? #0111,1000 #0101,0110 # 0011,0100? #? 0001,0010? #
????? ?####################################################
地址 #????? 100????????#???? 101?????? ?#????????? 102????? ?#????? 103??????? ? #
?????? ####################################################
?另一種稱為big-endian,正好相反,存放在內存中最低位的數值是來自數據的最左邊邊部分(也就是數據的最高為部分)。
?比如一個16進制數字0x12345678,在內存存放的方式如下:
?????? 低地址 ------------------> 高地址
?????? ####################################################
?值?? # 0001,0010? #0011,0100 # 0101,0110 ?# ?0111,1000? #
?????? ####################################################
地址 #?????? 100??????? ?#???? 101??????? ?#??????? 102???? ?? #????? ? 103??????? ?#
?????? ####################################################
從上面的例子可以看到,采用big endian方式存儲數據是符合我們人類的思維習慣的
big endian:是指低地址存放最高有效字節(MSB:Most Significant Byte, 最高有效字節),
little endian:則是低地址存放最低有效字節(LSB:Least Significant Byte, 最低有效字節)
談到字節序的問題,必然牽涉到兩大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。
IBM, Motorola(Power PC), Sun的機器一般采用大端(big endian)方式存儲數據。而x86系列則采用
little endian方式存儲數據
?
是Little Endian還是Big Endian與操作系統和芯片類型都有關系。 具體情形參考處理器手冊。
?
2. 如何判斷系統是Big Endian還是Little Endian
?
在/usr/include/中(包括子目錄)查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER),確定其值。
這個值一般在endian.h或machine/endian.h文件中可以找到,有時在feature.h中,不同的操作系統可能
有所不同。一般來說,Little Endian系統BYTE_ORDER(或_BYTE_ORDER,__BYTE_ORDER)為1234,Big Endian系統為4321
3. 為什么要注意字節序的問題?
?
在單機環境里的程序不用考慮字節序(endian)的問題,因為字節序的不同是在不同單機環境里的,如果你要在不同單機
之間傳遞數據,就要考慮字節序的問題,因為數據是按地址存取的,如果你是不同的字節序單機通信,就會導致傳輸數據
”變異“,例如,把little endian環境的數據0x12345678的指針傳遞給big endian環境,數據就“變異”為0x78563412
?
所有網絡協議也都是采用big endian的方式來傳輸數據的。所以有時我們也會把big endian方式稱之為網絡字節序。當兩臺采
用不同字節序的主機通信時,在發送數據之前都必須經過字節序的轉換成為網絡字節序后再進行傳輸。
?
?
在異構主機數據庫遷移的過程一定要注意這個,如果字節序不同,可以用rman convert轉換字節序(endian)
?
例如:
?
RMAN TARGET /
CONVERT TABLESPACE ts1,ts2 TO PLATFORM 'Linux IA (32-bit)' FORMAT '/tempdir/%U';
?
?
?
----end----
總結
以上是生活随笔為你收集整理的Big Endian与Little Endian区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lilu:Rails Mockup驱动开
- 下一篇: 微信小程序 使用 TGit管理代码