判斷機器大端序和小端序

2021-06-29 00:28:18 字數 1469 閱讀 8278

//若處理器是big_endian的,則返回0;若是little_endian的,則返回1

//聯合體union的存放順序是所有成員都從低位址開始存放

//乙個聯合變數的長度等於各成員中最長的長度。

//應該說明的是,這裡所謂的共享不是指把多個成員同時裝入乙個聯合變數內,

//而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值,賦入新值則衝去舊值。

int checkcpu( )

c; c.a = 1;

return(c.b ==1);}/*

剖析:嵌入式系統開發者應該對little-endian和big-endian模式非常了解。

採用little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組,

而big-endian模式對運算元的存放方式是從高位元組到低位元組。

記憶體位址 存放內容

0x4000 0x34

0x4001 0x12

而在big-endian模式cpu記憶體中的存放方式則為:

記憶體位址 存放內容

0x4000 0x12

0x4001 0x34

記憶體位址 存放內容

0x4000 0x78

0x4001 0x56

0x4002 0x34

0x4003 0x12

而在big-endian模式cpu記憶體中的存放方式則為:

記憶體位址 存放內容

0x4000 0x12

0x4001 0x34

0x4002 0x56

0x4003 0x78

聯合體union的存放順序是所有成員都從低位址開始存放,面試者的解答利用該特性,

輕鬆地獲得了cpu對記憶體採用little-endian還是big-endian模式讀寫。

如果誰能當場給出這個解答,那簡直就是乙個天才的程式設計師。

*///一、如何判斷cpu是大端還是小端?

//明白大端和小端的區別,實現起來就非常簡單:

#include int main()u;

printf("short幾個位元組?%d個位元組\n",sizeof(short));

if(sizeof(short) == 2)

else if(u.c[0] == 2 && u.c[1] == 1)

return 0; }}

//聯合體union的存放順序是所有成員都從低位址開始存放

//乙個聯合變數的長度等於各成員中最長的長度。

//應該說明的是,這裡所謂的共享不是指把多個成員同時裝入乙個聯合變數內,

//而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值,賦入新值則衝去舊值。

union fan;

int main1(void)

大端序和小端序

一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...

大端序和小端序

在socket程式設計的時候會遇到端序的問題。位元組序和程式語言無關,和硬體的儲存方式有關。intel的cpu使用小端序,而網路上傳輸資料使用大端序。在我的理解中,大端序和小端序並沒有哪種更好,只是儲存的方式不同而已。記憶體中我們只關心1byte,位址的基本單位也是byte。位元組序不關心1個byt...

大端序和小端序

一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...