判斷機器大小端的方法

2021-08-22 04:48:39 字數 1555 閱讀 1654

之前就簡單聽說過電腦的大小端之分,還有通過程式來判斷你的電腦是大端還是小端。今天在學習網路的時候又接觸了大小端,這裡就再給大家詳細的介紹一下電腦的大小端。

首先,介紹一下什麼是大端什麼是小端。大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;這和我們的閱讀習慣一致。

小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中.

那這個大小端到底有什麼區別,對我們編寫程式有什麼影響呢?這在我們正常程式設計下都是沒有問題的也沒有什麼影響,但是當我們在跨平台進行操作的時候,假如我們在程式中進行了位運算,很有可能我們在當前小端平台下測試沒有問題,但是在大端平台下就會使程式出現bug。我們目前常用的linux和windows都是小端系統。這些基本的小知識我們要做到了解。

最重要的是我們要學會通過程式來判斷當前的機器是大端還是小端。下邊給大家介紹幾個判斷程式大小端的方法。

我們後邊的程式都會用到定義的十六進製制資料這裡我們先將他在大小端機器中記憶體中是如何存放的畫出來。

第一種方法: 

int main()

我們定義乙個十六進製制的資料,資料型別為int型,之後定義乙個char型別的資料,int資料型別的大小為四個位元組,而char型別的資料為乙個位元組,所以將int型別的資料賦值給char時會丟失三個位元組的資料,char型別中儲存的是int型別中低位址的資料,這時候char型別獲取的資料輸出之後,如果輸出的是12那就說明你低位址位置的資料是12,那就說明你的資料是大端儲存,如果輸出的結果是78那當前條件下就是小端儲存。

第二種方法:

int main()

第二種方法和第一種類似,不過這裡是通過指標來實現的,本質上是沒有任何區別的。

第三種:

typedef union node

node;

int main(int argc, char *argv)

第三種相對複雜一些,用到了我們之前所學到的聯合體,聯合體有乙個最大的特點就是記憶體公用,在這個聯合體中,所有資料的記憶體是公用的這一部分。所以這裡我們定義了乙個聯合體node,其中有兩個資料乙個是i是int型別的,另乙個是char型別的c當我們給int型別的資料賦值時,char型別的資料也會有相應的值不過int型別讀取的是連續四個位元組的資料,但是char型別的只是讀取的乙個位元組的資料,這樣通過輸出char型別也就可以分辨出機器是大端還是小端了。

判斷機器大小端

引用 一 機器大小端 1 大端模式 是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 這和我們的閱讀習慣一致。short a 0x1234 如果0x12在低址處,就是大端2 小端...

判斷機器的大小端

一 概念 大端模式 big endian 是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中。為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為8bit。但是在c語言中除了8bit的char之外,還有16b...

判斷機器的大小端

大端 儲存 模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 小端 儲存 模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位,儲存在記憶體的高位址中。這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著 乙個位元組,乙個位元組為8bit。但是在c...