系統大小端檢測

2021-08-15 14:16:34 字數 1124 閱讀 7977

大小端的引入

在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為8bit。但是在c語言中除了8bit的char之外,還有16bit的short型別,32bit的int型別,另外位數大於8位的處理器,例如16位或者32位bit的處理器,由於暫存器寬度大於乙個位元組,要麼必然存在著乙個如何將多個位元組安排的問題。因此導致了大端儲存模式和小端儲存模式。

什麼叫大小端?

大端儲存模式:

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

小端儲存模式

小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這種儲存模式將位址的高低和資料位權有效的結合起來,高位址部分權值高,低位址部分權值低。

如何判斷當前使用的系統時大端還是小端呢?

有兩種方案可以解決這個問題:

①訪問乙個聯合體

聯合體的特點就是,同一時刻只能訪問到乙個資料成員,那麼對它進行初始化的時候,只對第乙個成員進行初始化,試比較它的第乙個成員和它的第二個成員,如果相同,則就說明是大端,否則就是小端

基本實現

#include

union port

;int main()

else

return

0;}

測試用例

我的環境是linux x86 32bit gcc。

②型別強轉

使用乙個整型型別的變數存放乙個8進製的資料,強轉為字元型別之後,然後訪問這個變數,可以根據資料判斷大小端。不多說了,直接上**,思路更清晰!

#include

int main()

if (c[0] == 0x12)

return

0;}

測試用例

暫時就這麼多了,繼續前進!

C語言 檢測大小端儲存

include int sys check else int main else return 0 此外,可以使用聯合體 共用體 union 封裝另乙個共同功能的函式 main函式預設 int sys check un un.i 1 if un.c 1 else 上面是以 1 為例判斷,以下是詳細對...

系統的大小端

比如有個十六進製制數0x12345678 為什麼用十六進製制數舉例?其實計算機只認識0和1,不管是字元還是數字,放到記憶體中後都是轉換成乙個二進位制數進行儲存,也就是一堆0和1。具體如何轉換成二進位制,和如何儲存的,就涉及到另乙個知識點了,這裡不做過多解釋 當然也可以用十進位制數,如30541989...

CPU大小端位元組序的檢測

機器的位元組序有兩種,即大端位元組序和小端位元組序。大端位元組序 在記憶體中,低位址存放資料的 高位,高位址存放資料的 低位 小端位元組序 在記憶體中,低位址存放資料的 低位,高位址存放資料的 高位 如例 定義資料 a 0x01020304 小端方式 01 02 03 04 大端方式 04 03 0...