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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

byte endian(biglittle endian)

發布時間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 byte endian(biglittle endian) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 大小端的區別
little endian:把低位字節存放在內存的低位; //
big endian:?? 將低位字節存放在內存的高位;

比如:0x1234,則12 就屬于高位字節;34 屬于低位字節

假如從地址0x0000 0000開始的一個字節中保存數據0x12345678, 這2中字節序在內存當中存放順序為:

address:????? 0x0000 0000??? 0x0000 0001??? 0x0000 0002??? 0x0000 0003
big_endian? 0x12????????????? ????0x34????????? ?????? 0x56???????? ??????? 0x78
lit-endian???? 0x78??????????????? ? 0x56??????????????? ?0x34?????????????? ? 0x12

2.? 為什么會有大小端模式的區分呢?
??? 因為在計算機系統中,我們是以字節為單位的,每個地址單元都對應著一個字節,一個字節為8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對于位數大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節,那么必然存在著一個如果將多個字節安排的問題。因此就導致了大端存儲模式和小端存儲模式。
??? 當前的存儲器,多以byte為訪問的最小單元,當一個邏輯上的整理必須分割為物理上的若干單元時就存在了先放誰后放誰的問題,于是endian的問題應運而生了,對于不同的存儲方法,就有Big-endian和Little-endian兩個描述.
??? (這兩個術語來自于 Jonathan Swift 的《格利佛游記》其中交戰的兩個派別無法就應該從哪一端--小端還是大端--打開一個半熟的雞蛋達成一致。在那個時代,Swift是在諷刺英國和法國之間的持續沖突,Danny Cohen,一位網絡協議的早期開創者,第一次使用這兩個術語來指代字節順序,后來這個術語被廣泛接納了。)

3. 各種CPU支持的字節序不同

lit-endian:? x86
big_endian:? Motorola/IBM/SUM cpu
ARM 既能工作于大端也能工作于小端

所有網絡協議也都是采用big endian的方式來傳輸數據的。所以有時我們也會把big endian方式稱之為網絡字節序。

4. 怎么檢測當前的處理器屬于哪個字節序?

?a. 用VC2005 調試查看short變量在內存中的布局,如下:

int _tmain(int argc, _TCHAR* argv[])
{
?short t = 0x1234;
?return 0;
}
?&t = 0x12ff60, t 在內存當中的布局如下圖:

?

?

由此可見, x86 CPU 采用的是little endian.

?

?b.? 利用字節序的基本規則進行判斷

enum BYTE_ENDIAN
{
?little_endian,
?big_endian,
?unknown_error
};

BYTE_ENDIAN check_byte_endian_1()
{
?short t = 0x1234;

?char c = (*(char *)(&t));

?if (0x12 == c)
?{
??return big_endian;
?}
?else if(0x34 == c)
?{
??return little_endian;
?}
?
?return unknown_error;
}

3.

/*---------------------------------------------------------------------------
聯合體union的存放順序是所有成員都從低地址開始存放,利用該特性,
輕松地獲得了CPU對內存采用Little-endian還是Big-endian模式讀寫
-----------------------------------------------------------------------------*/
BYTE_ENDIAN check_byte_endian_2()
{
?union test_endian
?{
??char c;
??short s;
?};

?test_endian t;
?t.s = 0x1234;
?
?if (0x12 == t.c)
?{
??return big_endian;
?}
?else if(0x34 == t.c)
?{
??return little_endian;
?}
?
?return unknown_error;
}

==================================
另外,可以參考百度百科(關鍵字:字節序):http://baike.baidu.com/view/2194385.htm 獲取更多信息。

?

?

?

?

總結

以上是生活随笔為你收集整理的byte endian(biglittle endian)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。