計算機儲存以位元組為單位,除開少數可以支援位定址的微控制器(8051,8052等)以外,cpu最小的訪存單元為8個位元位即乙個位元組,那麼對於超過乙個位元組的資料型別在記憶體中的儲存有以下兩種模式。
大端模式(big_endian): 位元組資料的高位元組儲存在低位址中,而位元組資料的低位元組儲存在高位址中。
小端模式(little_endian):位元組資料的高位元組儲存在高位址中,而位元組資料的低位址儲存在低位址中。
以int資料型別舉例。假設int在記憶體中的大小為兩個位元組,即佔16位,有如下**:
int a = 0x1234;
char* p = &a;
如果為大端模式,那麼p[0] = 0x12, p[1] = 0x34;
如果為小端模式,那麼p[0] = 0x34, p[1] = 0x12;
//判斷當前系統是大端模式還是小端模式
int check_endian(void) else
}`
網路位元組序是一種用於網路傳輸的位元組序,其採用大端模式。
主機位元組序指的是當前主機所使用的位元組序,具體跟cpu的設計有關,有可能是大端模式,也有可能是小端模式。
當主機需要通過網路進行通訊時,需要將主機位元組序轉換為網路位元組序,以確保資料的正確性。
有如下**:
typedef struct aaa aaa;
aaa st_a;
char* p;
st_a.a = 0x1234;
st_a.b = 255;
p = &st;
如果將以上**中的p通過某一型別介面與其他裝置進行互動,而沒有約束好大小端型別,則當兩個裝置之間的大小端順序不一致時,取到的將會是截然不同的資料。
當系統為了精簡記憶體的使用或者其他原因時,需要使用到位域,則必須要考慮大小端的形式。
struct message message_trunk;
如上結構體,在使用時一定要注意不同系統採用的究竟是大端莫斯還是小端模式,以避免沒必要可能產生的問題, 小端模式和大端模式 大端模式和小端模式
0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...
大端模式 小端模式
大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 小端模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中,這種儲存模式將...
大端模式小端模式
大端 和 小端 可以追溯到1726年的jonathan swift的 格列佛遊記 其中一篇講到有兩個國家因為吃雞蛋究竟是先打破較大的一端還是先打破較小的一端而爭執不休,甚至爆發了戰爭。1981年10月,danny cohen的文章 論聖戰以及對和平的祈禱 on holy wars and a ple...