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