日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言程序判断计算机的CPU大小端

發(fā)布時間:2023/12/2 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言程序判断计算机的CPU大小端 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如何判斷一臺計算機的CPU是大端還是小字端對齊呢?

那么首先得了解何為大端,何為小端,明確一下概念。

所謂大端模式,是指字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中。

小端格式:與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié)。

Big-Endian 和 Little-Endian 字節(jié)排序 ??

? 字節(jié)排序? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??含義

Big-Endian? ? 一個Word中的高位的Byte放在內(nèi)存中這個Word區(qū)域的低地址處。 Little-Endian??一個Word中的低位的Byte放在內(nèi)存中這個Word區(qū)域的低地址處。

必須注意的是:表中一個Word的長度是16位,一個Byte的長度是8位。如果一個數(shù)超過一個Word的長度,必須先按Word分成若干部分,然后每一部分(即每個Word內(nèi)部)按Big-Endian或者Little-Endian的不同操作來處理字節(jié)。 一個例子: 如果我們將0x1234abcd寫入到以0x0000開始的內(nèi)存中,則結(jié)果為 ? ?????????????? big-endian? ??? little-endian 0x0000? ?? ?0x12? ?? ?????????? 0xcd 0x0001? ?? ?0x34? ?? ????????? 0xab 0x0002? ?? ?0xab? ?? ? ? ? ? ? 0x34 0x0003? ?? ?0xcd? ?? ????????? 0x12 除了moto的68K系列和dec的sparc是big endian外,常見的cpu都是little endian。ARM同時支持 big和little,實際應(yīng)用中通常使用little endian,,Intel系列的CPU就是little endian的。

那么如何使用C語言程序判斷CPU是大端還是小端對齊呢?

有幾個方法:

方法一:直接使用看變量的內(nèi)存值,這里需要使用一些調(diào)試技巧。

#includevoid?main(){short?s=0x1234;char?*?pTest=(char*)&s;printf("%p?%0X?%0X",&s,pTest[0],pTest[1]);}

以十六進制輸出short型變量s在內(nèi)存中的字節(jié)分布。

運行結(jié)果為:

????????????????????? 0012FF7C

????????????????????? 34 12

方法二:使用C中的共用體:

請寫一個C函數(shù),若處理器是Big_endian的,則返回false;若是Little_endian的,則返回true。

   bool IsLitte_Endian()

??????????? {

??????????????? union w{

????????????????????????????????? int a;

????????????????????????????????? char b;

?????????????? }c;

????????????? c.a=1;

????????????? return (c.b==1);

??????????? }

方法三:強制類型轉(zhuǎn)換,和共用體的做法差不多。

?????????? bool IsLitte_Endian()

??????????? {

??????????????????? int wTest = 0x12345678;

?????????????????? short *pTest=(short*)&wTest;

?????????????????? return !(0x1234 == pTest[0]);

??????????? }

聲明:

本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請聯(lián)系我們刪除或授權(quán)事宜。

總結(jié)

以上是生活随笔為你收集整理的C语言程序判断计算机的CPU大小端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。