寫乙個程式判斷當前機器的位元組序是大端還是小端

2021-10-02 10:23:03 字數 1110 閱讀 7378

解答參考資料

我的實驗平台是x86_64的ubuntu

本文涉及到計算機位元組的大小端表示

假設有乙個int變數的值是0x01000002,它在記憶體中的起始位置是0x00000000

我們稱0x01000002,右邊是低位,左邊是高位

那麼大端位元組序的儲存結構是這樣的,上面一行是位址,下面一行是值

小端位元組序的儲存結構是這樣的

也就是,當計算機採用小端位元組序的時候,要從高位址(0x00000003)往低位址(0x00000000)讀才能讀出正確的值0x01000002

而採用大端位元組序的時候,要從低位址往高位址讀。換而言之,小端儲存是,低位址儲存的是整數的低位(這裡的低位是指02開始,到高位01);大端儲存時,低位址儲存的是整數的高位。

平常用的比較多的結構是c的struct,但是c還有乙個結構叫做union,最開始是為了節約記憶體而設計的結構,當然還有更小的結構叫做bit filed,這些型別會在這篇文章詳細介紹:

c中union有乙個特點,聯合(union)變數的所有成員共享同一塊儲存區/記憶體,因此聯合變數每個時刻裡只能儲存它的某乙個成員的值。就是因為這個特點,union的長度就是它最大變數的長度

我們利用這個特點可以寫出以下**

#include

intmain()

s; s.a=

0x01000002

;printf

("%x\n"

,s.c)

;}

s的長度是4個位元組,也就是最大成員a的長度,這一點可以用sizeof去驗證。

然後我們賦值給s.a令它的值是0x010000002,此時union的記憶體位址中只存有s.a的值,s.c並沒有賦值,但是s.c和s.a的起始位址是一樣的

我們用printf以16進製制的格式輸出s.c,這個時候就是s的起始位址的第乙個位元組的內容,在我的平台上輸出結果是2,表示低位址存的是整數值的低位,那麼我的平台位元組序是小端表示的。

寫乙個很簡單的程式

寫乙個很簡單的程式,是寢室的乙個女孩讓我幫她寫一下,看一下的。想的思想什麼都有的了,可是,自己做的時候,卻有很多的問題,浪費了乙個晚上。其實,卡在自己在選單的相應程式中弄了乙個迴圈,想像中,用這個迴圈給幾個變數賦值,然後用settimer,在ontimer函式中寫繪製的 讓在固定的時間畫圖,可是,這...

乙個c 寫的發牌程式

可以顯示一,二,三,四家的牌 主要是為了訓練我的牌感 記牌的能力 對有志於賭博或者橋牌事業的同志可能還有點用 編譯為bd.exe,使用方法輸入 bd h 看幫助 以下是源 處理命令列引數的 參考了vim include include include include using namespace ...

寫乙個簡單的node程式

寫乙個簡單的node程式 首先建立乙個新的目錄,建立乙個新的檔案,package.json這個檔案用來描述我們這個專案的資訊,依賴 npm install安裝完了之後,在本專案就可以看見相關的模組 編寫簡單的後端處理 var express require express var bodyparse...