如何使用程式判斷系統是大端還是小端?

2021-07-26 14:13:23 字數 1026 閱讀 8735

1 第一點,先要明白乙個,就是系統在申請記憶體的時候,是從高位址到低位址還是從低位址到高位址。

先用下面乙個簡單的程式來判斷申請的記憶體位址順序問題。下面是乙個典型的記憶體結構圖。

我們用下面這個程式來檢驗:

#include

intmain

()

輸出結果是:

可以看出,棧空間的申請是從高到低的。

2 有了上面的概念後,我們開始進行大端小端的分析。

先引入一則關於大端和小端的故事: 端模式(endian)的這個詞出自jonathan swift書寫的《格列佛遊記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究竟從大頭(big-endian)敲開還是從小頭(little-endian)敲開。在計算機業big endian和little endian也幾乎引起一場戰爭。在計算機業界,endian表示資料在儲存器中的存放順序。

簡單來說,大端就是將高位位元組放到低位位址空間裡,小端就是將高位位元組放到高位位元組。

那麼如何檢測乙個系統是大端還是小端,我們可以用下面的**:

#include

//判斷作業系統是大端還是小端

bool

checkendian();

my t;

t.a=1;

return(t.b==1);

}int

main

()

結果輸出是1,說明是小端的,具體分析如圖:

判斷系統CPU是大端還是小端

所謂的大端小端就是cpu在儲存資料的時候是從高位址開始儲存還是低位址開始儲存。例如在sizeof int 2的系統中,1 2 8 1 512 513,我們把這個值賦值給int ntemp 1 2 8 我們假定系統分配給變數ntemp的位址空間為 0x0000ff08到0x0000ff09,那麼0x0...

如何判斷機器是大端還是小端

這是一篇沒多少新意的文章,對big endian和little endian熟悉的人沒必要看,免得浪費時間。1 概念 所謂大端小端,指的是對於多位元組的資料型別 比如,int 在記憶體中存放的位元組順序。小端是指低位址的位元組存放的是資料的低位,高位址位元組存放的是資料的高位。大端是指低位址位元組存...

golang判斷系統是大端還是小端儲存

在看goim源 時看到這樣一段 func islittleendian bool 這段 是為了判斷系統是大端儲存還是小端儲存。如何區分大端儲存還是小端儲存?以0x01020304為例子 大端 16進製制 01 02 03 04 小端 16進製制 04 03 02 01 那麼來分析一下上面的 func...