本文將使用c語言編寫乙個可以判斷你主機資料儲存方式(大端和小端)的程式.
計算機硬體儲存資料的方式有兩種: 大端位元組序(big endian) 和 小端位元組序(little endian),兩者的區別可以簡單理解為:
- 大端: 資料高位位元組放在記憶體低位址(人類讀寫的習慣).
- 小端: 資料高位位元組放在記憶體高位址.
如現在有數 0x1234,則兩者儲存方式如下:
既然大端位元組序符合人類讀寫的習慣,那麼為什麼會有小端位元組序呢?當然並不是所有的計算機處理器都是小端模式的,目前ibm和freescale的一些處理器以及一些常見的微控制器晶元等都是採用大端位元組序儲存資料.而市面上大部分cpu則是採用小端位元組序,如intel等.因為大多數預設情況下計算機的電路先處理低位位元組,效率比較高,因為計算都是從低位開始的。所以,計算機的內部處理都是小端位元組序。但是,人類還是習慣讀寫大端位元組序。所以,除了計算機的內部處理,其他的場合幾乎都是大端位元組序,比如網路傳輸和檔案儲存。
本例都認為short佔2個位元組,不考慮可移植的情況.
#include
#include
union _byteorder
;int main(void)
else
printf("sizeof(short) = %ld\n",sizeof(short));
exit(exit_success);
}
這裡利用了union
中所有的資料成員共用乙個空間,同一時間只能儲存其中乙個資料成員的特性.
首先分配了乙個佔2個位元組的記憶體空間(union
分配的空間需要容納最大長度的資料成員),將0x0102
賦予short
型變數.
然後利用char
陣列,按乙個位元組的長度依次取出資料,然後利用上節介紹的大小端儲存方式的不同進行判斷.
- github:answerywj
- blog:
- email:[email protected]
- weibo:@answer不是答案
- csdn:answer不是答案的專欄
本作品採用知識共享署名-相同方式共享 4.0 國際許可協議進行許可。
編寫程式判斷你的電腦儲存方式是大端儲存還是小端
首先解釋一下為什麼會有大小端概念,對於超過乙個位元組資料,在電腦上儲存時需要跨越位元組來儲存,某些機器選擇在儲存器中按照從最低為有效位元組到最高有效位元組的順序儲存物件,而另一些機器則按照從最高為有效位元組到到最低為有效位元組的順序儲存,前一種儲存方式被稱為小端儲存,後一種方式被稱為大端儲存。簡單的...
C程式之儲存方式與區別
malloc 函式返回的是 void 型別,如果你寫成 p malloc sizeof int 則程式無法通過編譯,報錯 不能將 void 賦值給 int 型別變數 所以必須通過 int 來將強制轉換。第二 函式的實參為 sizeof int 用於指明乙個整型資料需要的大小。如果你寫成 int p ...
判斷你當前使用的shell程式
對於遊走在多種shell中的孩子,想知道當前用的是zsh還是bash,應該怎麼辦呢?這個問題似乎很簡單是吧?google答案一大堆,有用env的,有檢視 shell的,但這些都不嚴謹,直接說就是有坑。例如我平常用的shell是zsh,什麼env echo shell的都能顯示是zsh 但是,當我在z...