青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

關(guān)于網(wǎng)絡(luò)字節(jié)序

不同的 CPU 有不同的字節(jié)序類型 這些字節(jié)序是指整數(shù)在內(nèi)存中保存的順序 這個(gè)叫做主機(jī)序 
最常見的有兩種 

1 
 Little endian :將低序字節(jié)存儲在起始地址 
2 
 Big endian :將高序字節(jié)存儲在起始地址 

LE little-endian 
最符合人的思維的字節(jié)序 
地址低位存儲值的低位 

地址高位存儲值的高位 

怎么講是最符合人的思維的字節(jié)序,是因?yàn)閺娜说牡谝挥^感來說 

低位值小,就應(yīng)該放在內(nèi)存地址小的地方,也即內(nèi)存地址低位 

反之,高位值就應(yīng)該放在內(nèi)存地址大的地方,也即內(nèi)存地址高位 


BE big-endian 
最直觀的字節(jié)序 

地址低位存儲值的高位 

地址高位存儲值的低位 

為什么說直觀,不要考慮對應(yīng)關(guān)系 

只需要把內(nèi)存地址從左到右按照由低到高的順序?qū)懗?/span> 
把值按照通常的高位到低位的順序?qū)懗?/span> 
兩者對照,一個(gè)字節(jié)一個(gè)字節(jié)的填充進(jìn)去 


例子:在內(nèi)存中雙字 0x01020304(DWORD) 的存儲方式 


內(nèi)存地址 

4000 4001 4002 4003 
LE 04 03 02 01 
BE 01 02 03 04 

例子:如果我們將 0x1234abcd 寫入到以 0x0000 開始的內(nèi)存中,則結(jié)果為 

       big-endian   little-endian
0x0000   0x12       0xcd
0x0001   0x23       0xab
0x0002   0xab       0x34
0x0003   0xcd       0x12
x86
 
系列 CPU 都是 little-endian 的字節(jié)序 

網(wǎng)絡(luò)字節(jié)順序是 TCP/IP 中規(guī)定好的一種數(shù)據(jù)表示格式,它與具體的 CPU 類型、操作系統(tǒng)等無關(guān),從而可以保證數(shù)據(jù)在不同主機(jī)之間傳輸時(shí)能夠被正確解釋。網(wǎng)絡(luò)字節(jié)順序采用 big endian 排序方式。 


為了進(jìn)行轉(zhuǎn)換 bsd socket 提供了轉(zhuǎn)換的函數(shù) 有下面四個(gè) 
htons 
 unsigned short 類型從主機(jī)序轉(zhuǎn)換到網(wǎng)絡(luò)序 
htonl 
 unsigned long 類型從主機(jī)序轉(zhuǎn)換到網(wǎng)絡(luò)序 
ntohs 
 unsigned short 類型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機(jī)序 
ntohl 
 unsigned long 類型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機(jī)序 

在使用 little endian 的系統(tǒng)中 這些函數(shù)會(huì)把字節(jié)序進(jìn)行轉(zhuǎn)換 
在使用 big endian 類型的系統(tǒng)中 這些函數(shù)會(huì)定義成空宏 


同樣 在網(wǎng)絡(luò)程序開發(fā)時(shí) 或是跨平臺開發(fā)時(shí) 也應(yīng)該注意保證只用一種字節(jié)序 不然兩方的解釋不一樣就會(huì)產(chǎn)生 bug.

注: 

1 
、網(wǎng)絡(luò)與主機(jī)字節(jié)轉(zhuǎn)換函數(shù) :htons ntohs htonl ntohl (s 就是 short l  long h  host n  network)
2
 、不同的 CPU 上運(yùn)行不同的操作系統(tǒng),字節(jié)序也是不同的,參見下表。 

處理器      操作系統(tǒng)      字節(jié)排序 
Alpha     
全部      Little endian
HP-PA     NT     Little endian
HP-PA     UNIX     Big endian
Intelx86    
 全部      Little endian <-----x86 系統(tǒng)是小端字節(jié)序系統(tǒng) 

Motorola680x()     
全部      Big endian
MIPS     NT     Little endian
MIPS     UNIX     Big endian
PowerPC     NT     Little endian
PowerPC    
  NT     Big endian   <-----PPC 系統(tǒng)是大端字節(jié)序系統(tǒng) 

RS/6000     UNIX     Big endian
SPARC     UNIX     Big endian
IXP1200 ARM
 
核心      全部      Little endian

2.

一、字節(jié)序定義

字節(jié)序,顧名思義字節(jié)的順序,再多說兩句就是大于一個(gè)字節(jié)類型的數(shù)據(jù)在內(nèi)存中的存放順序(一個(gè)字節(jié)的數(shù)據(jù)當(dāng)然就無需談順序的問題了)。

其實(shí)大部分人在實(shí)際的開發(fā)中都很少會(huì)直接和字節(jié)序打交道。唯有在跨平臺以及網(wǎng)絡(luò)程序中字節(jié)序才是一個(gè)應(yīng)該被考慮的問題。

在所有的介紹字節(jié)序的文章中都會(huì)提到字節(jié)序分為兩類:Big-Endian和Little-Endian。引用標(biāo)準(zhǔn)的Big-Endian和Little-Endian的定義如下:
a) Little-Endian就是低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。
b) Big-Endian就是高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。
c) 網(wǎng)絡(luò)字節(jié)序:4個(gè)字節(jié)的32 bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。這種傳輸次序稱作大端字節(jié)序。由于 TCP/IP首部中所有的二進(jìn)制整數(shù)在網(wǎng)絡(luò)中傳輸時(shí)都要求以這種次序,因此它又稱作網(wǎng)絡(luò)字節(jié)序。比如,以太網(wǎng)頭部中2字節(jié)的“
 以太網(wǎng)幀類型”,表示后面數(shù)據(jù)的類型。對于ARP請求或應(yīng)答的以太網(wǎng)幀類型 來說,在網(wǎng)絡(luò)傳輸時(shí),發(fā)送的順序是0x08,0x06。在內(nèi)存中的映象如下圖所示:
棧底 (高地址)
---------------
0x06 -- 低位 
0x08 -- 高位
---------------
棧頂 (低地址)
該字段的值為0x0806。按照大端方式存放在內(nèi)存中。

二、高/低地址與高低字節(jié)

首先我們要知道我們C程序映像中內(nèi)存的空間布局情況:在《C專家編程》中或者《Unix環(huán)境高級編程》中有關(guān)于內(nèi)存空間布局情況的說明,大致如下圖:
----------------------- 最高內(nèi)存地址 0xffffffff
| 棧底
.
.              棧
.
棧頂
-----------------------
|
|
/|/

NULL (空洞)

/|/
|
|
-----------------------
                堆
-----------------------
未初始化的數(shù)據(jù)
----------------(統(tǒng)稱數(shù)據(jù)段)
初始化的數(shù)據(jù)
-----------------------
正文段(代碼段)
----------------------- 最低內(nèi)存地址 0x00000000

以上圖為例如果我們在棧上分配一個(gè)unsigned char buf[4],那么這個(gè)數(shù)組變量在棧上是如何布局的呢[注1]?看下圖:
棧底 (高地址)
----------
buf[3]
buf[2]
buf[1]
buf[0]
----------
棧頂 (低地址)

現(xiàn) 在我們弄清了高低地址,接著來弄清高/低字節(jié),如果我們有一個(gè)32位無符號整型0x12345678(呵呵,恰好是把上面的那4個(gè)字節(jié)buf看成一個(gè)整 型),那么高位是什么,低位又是什么呢?其實(shí)很簡單。在十進(jìn)制中我們都說靠左邊的是高位,靠右邊的是低位,在其他進(jìn)制也是如此。就拿 0x12345678來說,從高位到低位的字節(jié)依次是0x12、0x34、0x56和0x78。

高低地址和高低字節(jié)都弄清了。我們再來回顧一下Big-Endian和Little-Endian的定義,并用圖示說明兩種字節(jié)序:
以unsigned int value = 0x12345678為例,分別看看在兩種字節(jié)序下其存儲情況,我們可以用unsigned char buf[4]來表示value:
Big-Endian: 低地址存放高位,如下圖:
棧底 (高地址)
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
棧頂 (低地址)

Little-Endian: 低地址存放低位,如下圖:
棧底 (高地址)
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
---------------
棧頂 (低地址)

在現(xiàn)有的平臺上Intel的X86采用的是Little-Endian,而像Sun的SPARC采用的就是Big-Endian。

三、例子

嵌入式系統(tǒng)開發(fā)者應(yīng)該對Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU對操作數(shù)的存放方式是從低字節(jié)到高字節(jié),而Big-endian模式對操作數(shù)的存放方式是從高字節(jié)到低字節(jié)。

例如,16bit寬的數(shù)0x1234在Little-endian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:

內(nèi)存地址 存放內(nèi)容
0x4001    0x12
0x4000    0x34

而在Big-endian模式CPU內(nèi)存中的存放方式則為:

內(nèi)存地址 存放內(nèi)容
0x4001    0x34
0x4000    0x12

32bit寬的數(shù)0x12345678在Little-endian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:

內(nèi)存地址 存放內(nèi)容
0x4003     0x12
0x4002     0x34
0x4001     0x56
0x4000     0x78

而在Big-endian模式CPU內(nèi)存中的存放方式則為:

內(nèi)存地址 存放內(nèi)容
0x4003     0x78
0x4002     0x56
0x4001     0x34
0x4000     0x12


網(wǎng)絡(luò)傳輸一般采用大端序,也被稱之為網(wǎng)絡(luò)字節(jié)序,或網(wǎng)絡(luò)序IP協(xié)議中定義大端序?yàn)榫W(wǎng)絡(luò)字節(jié)序。 
http://blog.csdn.net/zhaojiangwei102/article/details/4532184

posted on 2012-03-07 11:13 厚積薄發(fā) 閱讀(975) 評論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程

導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久人人爽人人爽爽久久| 免费在线国产精品| 国外成人在线| 国语自产精品视频在线看一大j8 | 99视频精品在线| 一区二区三区视频在线播放| 亚洲无吗在线| 久久99在线观看| 欧美成人免费全部| 欧美性理论片在线观看片免费| 国产精品jizz在线观看美国| 国产午夜精品一区二区三区视频| 曰韩精品一区二区| 一区二区三区成人| 久久精品中文字幕一区二区三区 | 亚洲一二三区精品| 久久女同互慰一区二区三区| 亚洲国产精品久久久久| 一本色道久久综合亚洲精品婷婷| 亚洲免费在线精品一区| 乱码第一页成人| 国产精品区一区二区三| 国产精品久久激情| 亚洲欧洲日本一区二区三区| 午夜日韩视频| 亚洲黄色大片| 欧美一级久久久| 麻豆精品视频在线| 在线视频日韩精品| 久久综合网hezyo| 国产精品wwwwww| 亚洲人成久久| 久久免费黄色| 中文欧美字幕免费| 欧美丰满高潮xxxx喷水动漫| 国产性天天综合网| 亚洲视频中文字幕| 欧美激情在线免费观看| 欧美一区二区视频在线观看| 欧美日韩1080p| 亚洲国产一区二区三区高清| 久久久亚洲高清| 亚洲欧美日韩国产综合精品二区| 欧美区国产区| 亚洲精品国产品国语在线app| 久久久久久9| 香蕉久久精品日日躁夜夜躁| 国产精品hd| 亚洲一区二区三区国产| 亚洲精品日日夜夜| 欧美日韩高清不卡| 妖精成人www高清在线观看| 欧美二区在线| 快she精品国产999| 在线观看日韩专区| 久久一区免费| 久久久精品999| 好男人免费精品视频| 久久亚洲一区二区三区四区| 先锋资源久久| 黑人巨大精品欧美一区二区小视频| 欧美中文字幕视频| 欧美一区亚洲二区| 黄色综合网站| 另类尿喷潮videofree | 久久国产精品99精品国产| 国产精品美女久久久久av超清| 亚洲淫性视频| 亚洲欧美日韩精品综合在线观看| 国产精品女主播| 欧美一区=区| 欧美一区2区三区4区公司二百| 国产女主播在线一区二区| 久久国产欧美| 快射av在线播放一区| 亚洲精品国精品久久99热| 亚洲精品一区二区在线观看| 欧美三级电影精品| 久久精品日产第一区二区| 久久九九热免费视频| 亚洲国产91| 99精品99久久久久久宅男| 国产欧美 在线欧美| 欧美大片在线看免费观看| 欧美日本一道本| 一区二区三区在线观看欧美| 欧美成人中文| 欧美视频手机在线| 久久久青草青青国产亚洲免观| 免费观看日韩av| 午夜精品久久久| 久久亚洲春色中文字幕| 亚洲午夜日本在线观看| 久久岛国电影| 在线亚洲观看| 久久亚洲综合色| 亚洲欧美精品suv| 老司机久久99久久精品播放免费| 一区二区三区四区五区视频| 久久精品成人| 亚洲婷婷在线| 蜜臀久久久99精品久久久久久| 亚洲欧美国产日韩天堂区| 久久久中精品2020中文| 亚洲一区二区网站| 欧美不卡在线| 久久一区二区三区国产精品| 欧美日韩一区在线| 欧美高清一区二区| 国产欧美一区二区视频| 日韩午夜免费视频| 亚洲激情视频| 久久九九全国免费精品观看| 午夜精品久久一牛影视| 欧美日韩妖精视频| 亚洲国产精品福利| 影音先锋国产精品| 欧美中文字幕精品| 欧美一区二区三区在线视频| 欧美日韩亚洲精品内裤| 亚洲高清视频的网址| 一区二区在线观看视频| 欧美一区二区精品在线| 亚欧美中日韩视频| 国产精品久久久久一区| av72成人在线| 在线亚洲一区观看| 欧美国产精品久久| 亚洲电影在线| 亚洲人成毛片在线播放女女| 久久欧美中文字幕| 裸体女人亚洲精品一区| 精品不卡一区二区三区| 欧美诱惑福利视频| 久久蜜桃资源一区二区老牛 | 亚洲一区国产精品| 亚洲综合视频网| 国产精品久久久久久久久久久久久| 日韩视频三区| 亚洲免费在线播放| 国产美女精品| 欧美在线视频网站| 另类图片综合电影| 亚洲精品美女在线| 欧美日本一区二区三区| 一本大道久久a久久精品综合| 亚洲无线视频| 国产精品女主播在线观看| 亚洲欧美变态国产另类| 欧美有码视频| 在线观看亚洲精品视频| 亚洲精品乱码久久久久久按摩观| 亚洲日韩视频| 欧美日韩日本网| 亚洲图片欧美日产| 久久久久免费| 亚洲人成精品久久久久| 欧美三区在线观看| 销魂美女一区二区三区视频在线| 久久亚洲国产成人| 亚洲麻豆av| 国产精品一区久久| 久久野战av| 99精品国产在热久久下载| 香蕉久久夜色精品国产使用方法| 精品va天堂亚洲国产| 欧美日韩精品一区二区天天拍小说| 亚洲特黄一级片| 欧美 日韩 国产一区二区在线视频| 亚洲精品一区二区三区av| 国产精品日韩欧美大师| 狂野欧美激情性xxxx欧美| 一区二区91| 牛夜精品久久久久久久99黑人| 一本色道88久久加勒比精品| 国产日韩在线一区二区三区| 欧美成人综合一区| 欧美亚洲在线观看| 9久草视频在线视频精品| 老司机午夜精品| 午夜精品久久| 日韩小视频在线观看专区| 国产亚洲欧美在线| 欧美日韩免费看| 美女脱光内衣内裤视频久久影院 | 久久综合国产精品| 99v久久综合狠狠综合久久| 久久久高清一区二区三区| 日韩一级免费| 亚洲成人直播| 国产一二精品视频| 欧美三区在线观看| 欧美jizzhd精品欧美巨大免费| 午夜精品在线观看| 亚洲最新合集| 亚洲精选成人| 91久久精品美女高潮| 欧美成人中文字幕| 久久久久久日产精品| 性亚洲最疯狂xxxx高清|