通過簡單的c程式可以判斷當前主機位元組序是大端(big-endian:be)或小端(little endian:le)。
code:
#include
#include
int main()
un;un.s = 0x0102;
if ( sizeof(short) == 2 )
else
printf("sizeof(short) = %d\n", sizeof(short));
exit(0);
}
編譯 && 執行:
linux(le):
$ uname -a
linux localhost.localdomain 2.6
.32-642.el6.x86_64 #1 smp tue may 10 17:27:01 utc 2016 x86_64 x86_64 x86_64 gnu/linux
$ gcc -o byte-order
byte-order.c
$ ./byte-order
little-endian
hpux(be):
$ uname -a
hp-ux opel b.11
.31 u ia64 2596713519 unlimited-user license
$ acc -o byte-order byte-order
.c$ ./byte-order
big-endian
aix(be):
$ uname -a
aix aix68113 1
600f7caa94c00
$ xlc -o byte-order
byte-order.c
$ ./byte-order
big-endian
2018.04.15更新
在看到htons等函式時,忽然想到還有個辦法判斷主機位元組序。
#include
#include
#include
#include
int main()
linux:
$ gcc -o main main.c
$ ./main
little
endian
原理是:
我雖然不知道主機位元組序是啥,但是我可以通過htons這樣的函式,將其統一轉換為網路位元組序。
網路位元組序是大端(be)。
我拿轉換前的數值和轉換後的大端數值進行比較:
如果相等,說明當前主機位元組序等價於網路位元組序,be;否則,當前主機位元組序為le。
需要注意:
構建主機位元組序的數值時,不要使在le和be下都一樣的數值,例如:
(16bit):
0xffffffff
0xaabbbbaa
這樣的數值,在le和be下數值都是相等的,=.=!!!
主機位元組序 大端小端
開發中總是遇到大端和小端位元組序問題,這都是由cpu引入的.對於x86體系cpu,採用的小端位元組序 對於ppc體系cpu,採用的大端位元組序 什麼叫小端,什麼叫大端呢?舉個簡單例子 小端 int i 0x12345678 在記憶體裡存的是 78 56 34 12 大端 int i 0x123456...
大端位元組序 小端位元組序(網路位元組序 主機位元組序)
大端位元組序 整數的高位位元組儲存在記憶體的低位址處,低位元組儲存在記憶體的高位址處。一般pc大多採用小端位元組序,也稱為主機位元組序。網路上傳輸採用大端位元組序,也稱為網路位元組序。linux中常用轉換函式如下 include uint32 t htonl uint32 t hostlong 無符...
c 位元組序判斷(大端和小端)
little endian就是低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端 big endian就是高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端 如 16bit寬的數0x1234在little endian模式 以及big endian模式 cpu記憶體中...