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

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>
            午夜精品福利电影| 在线精品福利| 在线视频你懂得一区| 亚洲国产精品黑人久久久| 久久精品视频导航| 欧美国产亚洲精品久久久8v| 亚洲高清资源| 在线综合+亚洲+欧美中文字幕| 亚洲电影自拍| 欧美精品一区二区三区很污很色的| 99视频一区二区| 一本色道久久加勒比88综合| 国产精品久久看| 久久欧美中文字幕| 美女啪啪无遮挡免费久久网站| 久久这里只有| 亚洲人体1000| 久久国产精品久久精品国产| 欧美亚洲日本网站| 亚洲高清不卡在线| 日韩午夜在线视频| 国产欧美日韩在线观看| 免费亚洲婷婷| 国产精品女人网站| 亚洲大片一区二区三区| 国产精品久久波多野结衣| 久久久久久国产精品mv| 男同欧美伦乱| 欧美一级大片在线观看| 免费美女久久99| 校园春色国产精品| 欧美国产91| 久久久久久电影| 欧美视频一区二区在线观看 | 欧美激情亚洲自拍| 欧美一区二区三区日韩视频| 欧美成人一区二区三区在线观看| 亚洲综合首页| 欧美国产在线观看| 久久久欧美一区二区| 欧美日韩亚洲不卡| 亚洲第一页在线| 国产自产2019最新不卡| 亚洲午夜av电影| 国产精品theporn88| 欧美成人免费在线| 精品999成人| 亚洲女与黑人做爰| 一区二区三区视频免费在线观看| 久久综合九色综合久99| 久久久久一区| 国产婷婷色综合av蜜臀av| 亚洲视频在线免费观看| 99精品视频免费全部在线| 久久综合狠狠综合久久综合88 | 日韩视频在线一区二区三区| 久久国产一二区| 亚洲电影天堂av| 欧美在线观看视频在线| 午夜精品久久久久影视 | 欧美一区二区三区在线免费观看| 中文在线一区| 欧美波霸影院| 欧美成人黑人xx视频免费观看| 国产偷国产偷精品高清尤物| 亚洲永久免费观看| 亚洲中字在线| 国产精品极品美女粉嫩高清在线 | 欧美有码视频| 国产欧美日韩一区二区三区在线 | 你懂的视频一区二区| 久久精品卡一| 久久精品首页| 国精产品99永久一区一区| 亚洲欧美中文日韩v在线观看| 亚洲欧美日韩爽爽影院| 国产农村妇女精品一二区| 性8sex亚洲区入口| 免费日韩av片| 99精品免费| 国产精品久久久久久亚洲调教 | 亚洲性视频h| 久久久久久久精| 亚洲国内精品在线| 欧美日韩三级在线| 亚洲综合日韩| 欧美 日韩 国产精品免费观看| 亚洲欧洲日本专区| 欧美日韩网址| 欧美一区二区三区精品电影| 快射av在线播放一区| 亚洲精品一区在线| 国产精品美女一区二区在线观看| 欧美一区二区三区免费看| 每日更新成人在线视频| 亚洲乱码精品一二三四区日韩在线| 欧美日韩国产专区| 欧美一级艳片视频免费观看| 欧美成人资源| 亚洲欧美日韩一区| 亚洲国产精品99久久久久久久久| 欧美日韩日本网| 欧美在线国产| 99国产精品99久久久久久粉嫩| 久久久97精品| 亚洲天天影视| 亚洲福利视频免费观看| 国产精品美女久久福利网站| 久久一二三国产| 亚洲一区二区三区高清不卡| 欧美高清在线观看| 久久电影一区| 夜夜嗨av色综合久久久综合网| 伊人成年综合电影网| 欧美香蕉视频| 欧美精品亚洲精品| 久久九九精品99国产精品| 一本大道久久精品懂色aⅴ| 嫩草伊人久久精品少妇av杨幂| 欧美一区二区三区四区在线| 亚洲精品欧洲精品| 黄色免费成人| 国产欧美亚洲一区| 欧美亚韩一区| 欧美日本在线| 欧美高清在线视频| 久久青青草综合| 欧美专区日韩视频| 午夜久久99| 亚洲综合色激情五月| 99av国产精品欲麻豆| 欧美激情网友自拍| 鲁鲁狠狠狠7777一区二区| 久久精品人人| 久久精品国产清高在天天线| 性久久久久久久| 亚洲欧美国产毛片在线| 中文在线资源观看视频网站免费不卡| 亚洲黄一区二区三区| 亚洲高清视频在线观看| 在线成人黄色| 亚洲黄色影片| 亚洲精品免费一区二区三区| 亚洲激情精品| 亚洲精品网站在线播放gif| 国产精品永久在线| 亚洲欧美日韩综合国产aⅴ| 亚洲午夜久久久久久久久电影院| 亚洲狼人综合| 宅男噜噜噜66一区二区66| 一区二区三区久久| 亚洲一区二区四区| 亚洲欧美日韩一区| 欧美专区在线观看一区| 欧美一区二区在线看| 久久久久.com| 免费成人你懂的| 欧美日本韩国在线| 国产精品美女在线观看| 国产亚洲欧美日韩日本| 在线看片第一页欧美| 亚洲三级免费| 亚洲欧美春色| 久久一区精品| 亚洲欧洲美洲综合色网| 一区二区三区欧美激情| 午夜精品亚洲一区二区三区嫩草| 久久久综合精品| 欧美日本国产| 国产一区二区三区视频在线观看 | 精久久久久久| 日韩西西人体444www| 亚洲影视中文字幕| 猛干欧美女孩| 一级成人国产| 久久婷婷国产麻豆91天堂| 欧美黄色日本| 国产日韩精品视频一区二区三区| 影视先锋久久| 亚洲一区二区三区久久| 麻豆精品91| 一本色道88久久加勒比精品| 久久国产精品久久久久久| 欧美激情网站在线观看| 国产亚洲激情视频在线| 日韩视频在线永久播放| 久久精品国产亚洲5555| 亚洲精品在线看| 久久久久国产精品www| 欧美视频专区一二在线观看| 一区在线免费| 午夜精品久久久久| 亚洲第一毛片| 久久都是精品| 国产精品视频1区| 亚洲美女黄网| 久久综合中文字幕| 亚洲欧洲av一区二区| 欧美日韩一区二区三区在线观看免| 精品成人在线|