大端和小端
嵌入式開發者應該對大端和小端很熟悉。在記憶體單元中資料是以位元組為儲存單位的,對於多位元組資料,在小端模式中,低位元組資料存放在低位址單元,而在大端模式中,低位元組資料存放在高位址單元。比如乙個定義乙個short型的變數a,賦值為1,由於short型資料佔2位元組。
在小端模式中,其存放方式為
0x4000 00000001
0x4001 00000000
而在大端模式中,其存放方式為
0x4000 00000000
0x4001 00000001
若需用程式驗證系統是大端模式還是小端模式(一般我們用的x86結構的都是小端模式),有兩種方法
1.利用聯合體的性質
因為聯合體中的成員是共享記憶體的,並且資料是從低位址存放的,可以利用這一性質判斷。
typedef unionu;int checkcpu1() //
若是小端則返回1,否則返回0
由於short佔2位元組,而char佔1位元組,當對c賦值為1時,若系統為小端模式,則在系統中存放方式為:
那麼當取a的值時,a的整型值必定為1;否則為0.
2.強制取低位址單元的資料
intcheckcpu2()
很顯然,若是小端模式,指標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的機器採用這種規則,只是...
小端和大端
或許你曾經仔細了解過什麼是大端小端,也動手編寫了測試手頭上的機器上是大端還是小端的程式,甚至還編寫了大端小端轉換程式 但過了一段時間之後,當你再看到大端和小端這兩個字眼,你的腦中很快浮起了自己曾經做過的工作,卻總是想不起究竟哪種是大端 哪種是小端,然後又去查以前寫的記錄?更讓人不快的是,這種經歷反反...