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

yehao's Blog

關于網絡字節序

不同的 CPU 有不同的字節序類型 這些字節序是指整數在內存中保存的順序 這個叫做主機序 
最常見的有兩種 

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

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

地址高位存儲值的高位 

怎么講是最符合人的思維的字節序,是因為從人的第一觀感來說 

低位值小,就應該放在內存地址小的地方,也即內存地址低位 

反之,高位值就應該放在內存地址大的地方,也即內存地址高位 


BE big-endian 
最直觀的字節序 

地址低位存儲值的高位 

地址高位存儲值的低位 

為什么說直觀,不要考慮對應關系 

只需要把內存地址從左到右按照由低到高的順序寫出 

把值按照通常的高位到低位的順序寫出 

兩者對照,一個字節一個字節的填充進去 


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


內存地址 

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

例子:如果我們將 0x1234abcd 寫入到以 0x0000 開始的內存中,則結果為 

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

網絡字節順序是 TCP/IP 中規定好的一種數據表示格式,它與具體的 CPU 類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋。網絡字節順序采用 big endian 排序方式。 


為了進行轉換 bsd socket 提供了轉換的函數 有下面四個 
htons 
 unsigned short 類型從主機序轉換到網絡序 
htonl 
 unsigned long 類型從主機序轉換到網絡序 
ntohs 
 unsigned short 類型從網絡序轉換到主機序 
ntohl 
 unsigned long 類型從網絡序轉換到主機序 

在使用 little endian 的系統中 這些函數會把字節序進行轉換 
在使用 big endian 類型的系統中 這些函數會定義成空宏 


同樣 在網絡程序開發時 或是跨平臺開發時 也應該注意保證只用一種字節序 不然兩方的解釋不一樣就會產生 bug.

注: 

1 
、網絡與主機字節轉換函數 :htons ntohs htonl ntohl (s 就是 short l  long h  host n  network)
2
 、不同的 CPU 上運行不同的操作系統,字節序也是不同的,參見下表。 

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

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

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

2.

一、字節序定義

字節序,顧名思義字節的順序,再多說兩句就是大于一個字節類型的數據在內存中的存放順序(一個字節的數據當然就無需談順序的問題了)。

其實大部分人在實際的開發中都很少會直接和字節序打交道。唯有在跨平臺以及網絡程序中字節序才是一個應該被考慮的問題。

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

二、高/低地址與高低字節

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

NULL (空洞)

/|/
|
|
-----------------------
                堆
-----------------------
未初始化的數據
----------------(統稱數據段)
初始化的數據
-----------------------
正文段(代碼段)
----------------------- 最低內存地址 0x00000000

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

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

高低地址和高低字節都弄清了。我們再來回顧一下Big-Endian和Little-Endian的定義,并用圖示說明兩種字節序:
以unsigned int value = 0x12345678為例,分別看看在兩種字節序下其存儲情況,我們可以用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) -- 低位
---------------
棧頂 (低地址)

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

三、例子

嵌入式系統開發者應該對Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU對操作數的存放方式是從低字節到高字節,而Big-endian模式對操作數的存放方式是從高字節到低字節。

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

內存地址 存放內容
0x4001    0x12
0x4000    0x34

而在Big-endian模式CPU內存中的存放方式則為:

內存地址 存放內容
0x4001    0x34
0x4000    0x12

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

內存地址 存放內容
0x4003     0x12
0x4002     0x34
0x4001     0x56
0x4000     0x78

而在Big-endian模式CPU內存中的存放方式則為:

內存地址 存放內容
0x4003     0x78
0x4002     0x56
0x4001     0x34
0x4000     0x12


網絡傳輸一般采用大端序,也被稱之為網絡字節序,或網絡序IP協議中定義大端序為網絡字節序。 
http://blog.csdn.net/zhaojiangwei102/article/details/4532184

posted on 2012-03-07 11:13 厚積薄發 閱讀(979) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国色天香一区二区| 午夜精品婷婷| 99亚洲伊人久久精品影院红桃| 亚洲全部视频| 在线视频亚洲一区| 欧美视频在线观看| 免费精品视频| 欧美一区二区三区在线免费观看| 久久精品国产99国产精品| 在线成人激情黄色| 久久先锋影音av| 亚洲国产小视频在线观看| 在线观看亚洲视频| 噜噜噜久久亚洲精品国产品小说| 亚洲一区二区高清| 亚洲精品少妇30p| 老色鬼久久亚洲一区二区| 久久aⅴ乱码一区二区三区| 亚洲国产综合在线看不卡| 一区二区av在线| 亚洲一区二区视频在线| 亚洲精品美女在线| 91久久黄色| 久久久久久久性| 夜夜爽夜夜爽精品视频| 久久久国产精品一区二区三区| 亚洲一区二区三区欧美| 亚洲最新在线视频| 日韩视频专区| 欧美福利视频一区| 国产精品99久久久久久久vr | 国产精品呻吟| 欧美国产日韩亚洲一区| 亚洲午夜精品17c| 亚洲欧美视频在线| 欧美精品在线观看91| 欧美日韩在线一区| 欧美视频中文字幕在线| 亚洲午夜精品一区二区三区他趣| 欧美成人精品高清在线播放| 亚洲综合视频在线| 久久这里只有精品视频首页| 久久婷婷丁香| 亚洲欧洲日本国产| 欧美高清一区二区| 久久久久久穴| 国产精品高清在线| 亚洲成人在线观看视频| 亚洲一区在线观看视频| 在线视频你懂得一区二区三区| 久久久999国产| 国产欧美日韩一区| 亚洲欧美激情四射在线日 | 欧美激情一区二区三级高清视频| 久久精品男女| 久久午夜电影网| 亚洲人体1000| 欧美国产亚洲精品久久久8v| 免费不卡欧美自拍视频| 黄色在线一区| 亚洲欧美日韩综合国产aⅴ| 久久成人国产精品| 99视频一区二区| 亚洲精品国精品久久99热一| 亚洲欧美日韩国产综合| 国产日韩欧美综合在线| 91久久视频| 国产精品99一区| 亚洲天堂免费观看| 日韩图片一区| 能在线观看的日韩av| 一区二区三区免费在线观看| 99精品久久| 国产精品v亚洲精品v日韩精品| 日韩一区二区福利| 欧美日韩国产黄| 亚洲高清一二三区| 国产精品久久久久毛片软件| 午夜日韩在线观看| 亚洲日本激情| 欧美日韩三级| 91久久精品美女高潮| 国产精品亚洲欧美| 亚洲电影在线| 欧美三日本三级少妇三2023| 国产一区二区三区无遮挡| 狂野欧美激情性xxxx| 麻豆精品在线播放| 久久另类ts人妖一区二区 | 久久亚洲精品网站| 亚洲婷婷在线| 久久精品国产精品亚洲综合| 久久久国产精彩视频美女艺术照福利 | 你懂的成人av| 国产亚洲制服色| 久久久av毛片精品| 久久一区激情| 狠狠操狠狠色综合网| 欧美中在线观看| 99在线热播精品免费| 亚洲欧美激情诱惑| 国产精品成av人在线视午夜片| 欧美国产一区二区在线观看 | 免费永久网站黄欧美| 欧美www视频| 亚洲国产日韩美| 欧美一区二区三区免费观看视频| 美女主播精品视频一二三四| 一区二区视频免费在线观看| 欧美一区二区三区精品电影| 亚洲精品在线观看免费| 亚洲乱码国产乱码精品精天堂| 韩国av一区二区三区| 亚洲男人av电影| 女人天堂亚洲aⅴ在线观看| 国产女人精品视频| 久久精品久久综合| 欧美日韩精品三区| 欧美一区二区私人影院日本| 亚洲免费视频网站| 国产麻豆综合| 欧美激情va永久在线播放| 欧美激情1区2区3区| 亚洲欧美电影院| 久久夜色精品一区| 在线视频欧美日韩| 欧美资源在线观看| 中文在线一区| 牛牛国产精品| 久久色在线观看| 国产精品99免费看 | 亚洲精品乱码| 欧美日韩另类在线| 欧美成人性生活| 国产一区二区中文字幕免费看| 一本色道**综合亚洲精品蜜桃冫| 亚洲第一在线| 久久女同精品一区二区| 久久影院午夜论| 国产女主播一区二区| 在线亚洲欧美| 亚洲一区区二区| 久久一区二区精品| 久久精品亚洲乱码伦伦中文| 欧美日韩在线一二三| 亚洲精品少妇网址| 99精品视频一区| 欧美国产日韩二区| 亚洲欧洲在线观看| 一区二区三区四区在线| 欧美日韩日韩| 99精品国产热久久91蜜凸| 一区二区不卡在线视频 午夜欧美不卡在 | 国产一区观看| 午夜精品一区二区三区电影天堂| 一区二区精品| 欧美日韩一区二区三区视频| 夜夜爽夜夜爽精品视频| 午夜精品www| 国产精品日韩二区| 欧美一区二区三区免费观看视频| 久久久久久久综合狠狠综合| 国产一级一区二区| 久久露脸国产精品| 亚洲精品欧美一区二区三区| 中文精品一区二区三区 | 欧美aaa级| 亚洲人成在线观看| 亚洲老板91色精品久久| 欧美专区在线| 在线亚洲一区观看| 亚洲综合成人在线| 国产欧美日韩精品a在线观看| 亚洲永久精品大片| 美日韩精品视频| 亚洲人妖在线| 国产精品久久一卡二卡| 久久精品一区二区三区不卡牛牛 | 欧美91大片| 日韩视频在线永久播放| 国产精品久久久久久久久久久久| 亚洲午夜精品福利| 久久免费视频网| 亚洲美女黄网| 国产日韩欧美成人| 欧美成人免费va影院高清| 亚洲图片在区色| 女人天堂亚洲aⅴ在线观看| 亚洲一区二区视频在线| 国产综合色在线视频区| 欧美精品免费在线| 久久国产精品久久精品国产| 亚洲精品日韩在线观看| 久久尤物电影视频在线观看| 亚洲视频在线视频| 在线观看国产成人av片| 国产精品中文字幕欧美| 欧美大片免费观看在线观看网站推荐 | 麻豆精品网站| 亚洲制服av|