這本來是很easy的東東,不過今天看到一段判斷主機是大端模式還是小端模式的例子,和以前的常見的例子略有不同,更嚴密一些,故note一下:
大端:多位元組值的大端儲存在該值的起始位置;(老大站排頭為大)
小端:多位元組值的小端儲存在該值的起始位置;(老小站排頭為小)
例如16bit整數:0x0102,其中01即為多位元組值的大端,02即為多位元組值的小端。
在網路中傳輸的都是大端序,但具體到某台主機cpu的實現,則有可能是大端序也可能是小端序。一般x86是小端。
那麼,如何通過程式來判斷當前主機到底是大端還是小端呢?
常見方法:
/*判斷大端還是小端, 1:小端 0:大端*/
int getendian()
s; s.a = 0x0001;
return (1 == s.b);
}
聯合體union的存放順序是所有成員都從低位址開始存放,給s.a賦值為0x01,00為a的高階,01為a的低端,如果b==1,即a的低端位於起始位置,即小端,反之為大端。
《unix網路程式設計》(第一卷)給的方法:
/*判斷大端還是小端, 1:小端 0:大端*/
int getendian()
un; un.s = 0x0102;
if(2 == sizeof(short))
else if(2 == un.c[0] && 1 == un.c[1])
else
}else
return 0;
}
【**:
小端模式和大端模式 大端模式和小端模式
0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...
大端模式和小端模式
大端模式和小端模式 在c語言中除了8位的char型之外,還有16 位的short型,32 位的long型 要看具體的編譯器 對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然 存在著如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。大端模...
大端模式和小端模式
所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中...