Big-Endian Little-Endian
1. $ lscpu
union w
{
int a;
char b;
} c;
c.a=1;
printf("check: Big Endian 0 ; Little Endian 1 ; result:%d\n",(c.b==1));
return 0;
2. $ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0 -- On a Big Endian system (Solaris, SPARC)3. $ python test_endian
1 -- On a Little Endian system (Linux, Intel)
$ cat test_endian
#!/usr/bin/env python
from struct import pack
if pack('@h', 1) == pack('
print "Little Endian"
else:
print "Big Endian"
from struct import pack
if pack('@h', 1) == pack('
print "Little Endian"
else:
print "Big Endian"
4. $ gcc -o endian c_endian.c
# cat c_endian.c
#include
int main(void)
{#include
int main(void)
union w
{
int a;
char b;
} c;
c.a=1;
printf("check: Big Endian 0 ; Little Endian 1 ; result:%d\n",(c.b==1));
return 0;
}
一般來說,大部分使用者的作業系統(如windows, FreeBsd, Linux)是Little Endian的。
少部分,如MAC OS ,是Big Endian 的。
DEC (Digital Equipment Corporation,現在是Compaq公司的一部分)和Intel的機器(X86平臺)一般採用小端。
IBM, Motorola(Power PC), Sun的機器一般採用大端。
當然,這不代表所有情況。有的CPU即能工作於小端, 又能工作於大端, 比如ARM, Alpha,摩托羅拉的PowerPC。 具體情形參考處理器手冊。
具體這類CPU是大端還是小端,應該和具體設定有關。
(如,Power PC支援little-endian位元組序,但在預設配置時是big-endian位元組序)
少部分,如MAC OS ,是Big Endian 的。
DEC (Digital Equipment Corporation,現在是Compaq公司的一部分)和Intel的機器(X86平臺)一般採用小端。
IBM, Motorola(Power PC), Sun的機器一般採用大端。
當然,這不代表所有情況。有的CPU即能工作於小端, 又能工作於大端, 比如ARM, Alpha,摩托羅拉的PowerPC。 具體情形參考處理器手冊。
具體這類CPU是大端還是小端,應該和具體設定有關。
(如,Power PC支援little-endian位元組序,但在預設配置時是big-endian位元組序)
不同的CPU上執行不同的作業系統,位元組序也是不同的,參見下表。
處理器 作業系統 位元組排序
Alpha 全部 Little endian
HP-PA NT Little endian
HP-PA UNIX Big endian
Intelx86 全部 Little endian
Motorola680x() 全部 Big endian
MIPS NT Little endian
MIPS UNIX Big endian
PowerPC NT Little endian
PowerPC 非NT Big endian
RS/6000 UNIX Big endian
SPARC UNIX Big endian
IXP1200 ARM核心 全部 Little endian
Alpha 全部 Little endian
HP-PA NT Little endian
HP-PA UNIX Big endian
Intelx86 全部 Little endian
Motorola680x() 全部 Big endian
MIPS NT Little endian
MIPS UNIX Big endian
PowerPC NT Little endian
PowerPC 非NT Big endian
RS/6000 UNIX Big endian
SPARC UNIX Big endian
IXP1200 ARM核心 全部 Little endian
大小端的說法源自《格列佛遊記》。我們知道,雞蛋通常一端大一端小,小人國的人們對於剝蛋殼時應從哪一端開始剝起有著不一樣的看法。同樣,計算機界對於傳輸多位元組字(由多個位元組來共同表示一個資料型別)時,是先傳高位位元組(大端)還是先傳低位位元組(小端)也有著不一樣的看法,這就是計算機裡頭大小端模式的由來了。無論是寫檔案還是網路傳輸,實際上都是往流裝置進行寫操作的過程,而且這個寫操作是從流的低地址向高地址開始寫(這很符合人的習慣),對於多位元組字來說,如果先寫入高位位元組,則稱作大端模式。反之則稱作小端模式。也就是說,大端模式下,位元組序和流裝置的地址順序是相反的,而小端模式則是相同的。一般網路協議都採用大端模式進行傳輸。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28859270/viewspace-775664/,如需轉載,請註明出處,否則將追究法律責任。