大小端問題

2021-07-24 16:57:25 字數 943 閱讀 3734

什麼是大小端

大小端表示資料在儲存器中的存放順序

(1) 小端模式:資料的高位元組儲存在記憶體的高位址中,而低位元組儲存在記憶體的低位址中。這種儲存模式將位址的高低和資料位權有效的結合起來,高位址部分權值高,低位址部分權值低,和我們平常的邏輯方法一致。

(2) 大端模式:資料的高位元組儲存在記憶體的低位址中,而低位元組儲存在記憶體的高位址中。這種儲存模式有點類似於把資料當做字串順序來處理:位址由小向大增加,而資料從高位往低位放。

比如:十進位制數字305419896,轉化為十六進製制表示為0x12345678

其在記憶體中儲存方式如下圖:

為何有大小端之分

在計算機系統中是以位元組為單位儲存資料的,每個位址單元對應著乙個位元組,乙個位元組為8bit,但是在不同型別的編譯器中資料型別儲大小也不不同。對於位數大於8位的處理器,如16或32位處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個將多個位元組安排的問題,因此就導致了大端與小端儲存問題。

應用場景

(1不同端模式的處理器進行資料傳遞時必須要考慮端模式的不同。

(2在網路上傳輸資料時,由於資料傳輸的兩端對應不同的硬體平台,採用的儲存位元組順序可能不一致。所以在tcp/ip協議規定了在網路上必須採用網路位元組順序,也就是大端模式。對於char型別資料只佔乙個位元組,無所謂大小端。而對於非char型別資料,必須在資料傳送之前將其轉化為大端模式。

大小端驗證

(1)

int check_system()

un; un.i = 1;

return un.ch;

}

(2)

int check_system()

else

}

大小端問題

對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...

大小端問題

大小端問題 跨位元組位域大小端轉換例項講解 注 結構體整體當做u16 u32來賦值時才會產生這種問題,如果是按位元組或者移位方式訪問則沒有問題 typedef struct s bit sample 測試程式 vos void bigendiandomainfiledtest vos void 1 ...

大小端問題

大小端問題 最近工作中,有兩次遇到大小端問題,所以花時間寫這篇日誌,總結一下。1.實際需求 1 前段時間寫了乙個修復損壞的gzip檔案的tool,在linux server上編譯執行沒有問題。但是在solaris server上運編譯執行,結果總是和預期的不一致,跟蹤發現是由大小端問題導致的 2 最...