大端和小端

2021-09-07 21:16:17 字數 978 閱讀 9576

大端和小端

嵌入式開發者應該對大端和小端很熟悉。在記憶體單元中資料是以位元組為儲存單位的,對於多位元組資料,在小端模式中,低位元組資料存放在低位址單元,而在大端模式中,低位元組資料存放在高位址單元。比如乙個定義乙個short型的變數a,賦值為1,由於short型資料佔2位元組。

在小端模式中,其存放方式為

0x4000  00000001

0x4001  00000000

而在大端模式中,其存放方式為

0x4000  00000000

0x4001  00000001

若需用程式驗證系統是大端模式還是小端模式(一般我們用的x86結構的都是小端模式),有兩種方法

1.利用聯合體的性質

因為聯合體中的成員是共享記憶體的,並且資料是從低位址存放的,可以利用這一性質判斷。

typedef union 

u;int checkcpu1() //

若是小端則返回1,否則返回0

由於short佔2位元組,而char佔1位元組,當對c賦值為1時,若系統為小端模式,則在系統中存放方式為:

那麼當取a的值時,a的整型值必定為1;否則為0.

2.強制取低位址單元的資料

int

checkcpu2()

很顯然,若是小端模式,指標p指向的單元裡面的資料整型值必為0x34,否則為0x12。

測試程式:

/*

測試系統大端模式/小端模式 2011.10.1

*/#include

using

namespace

std;

typedef union

u;int checkcpu1() //

若是小端則返回1,否則返回0

intcheckcpu2()

int main(int argc, char *ar**)

大端和小端

1 小端與大端 對於乙個由2個位元組組成的16位整數,在記憶體中儲存這兩個位元組有兩種方法 一種是將低序位元組儲存在起始位址,這稱為小端 little endian 位元組序 另一種方法是將高序位元組儲存在起始位址,這稱為大端 big endian 位元組序。2 下面是兩個具體例子 記憶體位址 小端...

大端和小端

小端 little endian 儲存 在儲存器中按照最低有效位元組到最高有效位元組的順序儲存物件。大多數intel相容機採用這種規則。大端 big endian 規則 在儲存器中按照最高有效位元組到最低有效位元組的順序儲存物件。大多數ibm和sun microsystems的機器採用這種規則,只是...

小端和大端

或許你曾經仔細了解過什麼是大端小端,也動手編寫了測試手頭上的機器上是大端還是小端的程式,甚至還編寫了大端小端轉換程式 但過了一段時間之後,當你再看到大端和小端這兩個字眼,你的腦中很快浮起了自己曾經做過的工作,卻總是想不起究竟哪種是大端 哪種是小端,然後又去查以前寫的記錄?更讓人不快的是,這種經歷反反...