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

A Za, A Za, Fighting...

堅信:勤能補拙

2011知識點 - 大端模式與小端模式、網絡字節順序與主機字節順序 (經典)[zz]

大端模式與小端模式
一、概念及詳解
  在各種體系的計算機中通常采用的字節存儲機制主要有兩種: big-endian和little-endian,即大端模式和小端模式。
  先回顧兩個關鍵詞,MSB和LSB:
  MSB:Most Significant Bit ------- 最高有效位
        LSB:Least Significant Bit ------- 最低有效位
  大端模式(big-edian)
  big-endian:MSB存放在最低端的地址上。
  舉例,雙字節數0x1234以big-endian的方式存在起始地址0x00002000中:
        | data |<-- address
        | 0x12 |<-- 0x00002000
        | 0x34 |<-- 0x00002001
  在Big-Endian中,對于bit序列中的序號編排方式如下(以雙字節數0x8B8A為例):
        bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15
        ------MSB----------------------------------LSB
        val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
        +--------------------------------------------+
        = 0x8 B 8 A
  小端模式(little-endian)
  little-endian:LSB存放在最低端的地址上。
  舉例,雙字節數0x1234以little-endian的方式存在起始地址0x00002000中:
| data |<-- address
        | 0x34 |<-- 0x00002000
        | 0x12 |<-- 0x00002001
  在Little-Endian中,對于bit序列中的序號編排和Big-Endian剛好相反,其方式如下(以雙字節數0x8B8A為例):
bit | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
        ------MSB-----------------------------------LSB
        val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
        +---------------------------------------------+
        = 0x8 B 8 A 
二、數組在大端小端情況下的存儲:
  以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) -- 低位
        --------------
        低地址

  三、大端小端轉換方法:
  Big-Endian轉換成Little-Endian如下:
#define BigtoLittle16(A)                 ((((uint16)(A) & 0xff00) >> 8) | \
                                                          (((uint16)(A) & 0x00ff) << 8))
#define BigtoLittle32(A)                 ((((uint32)(A) & 0xff000000) >> 24) | \
                                                          (((uint32)(A) & 0x00ff0000) >> 8) | \
                                                          (((uint32)(A) & 0x0000ff00) << 8) | \
                                                          (((uint32)(A) & 0x000000ff) << 24))

  四、大端小端檢測方法:
  如何檢查處理器是big-endian還是little-endian?
  聯合體union的存放順序是所有成員都從低地址開始存放,利用該特性就可以輕松地獲得了CPU對內存采用Little-endian還是Big-endian模式讀寫。
int checkCPUendian()
{
union
{
unsigned int a;
unsigned char b;
}c;
c.a = 1;
return (c.b == 1);
}
/*return 1 : little-endian, return 0:big-endian*/ 

網絡字節順序

1、字節內的比特位不受這種順序的影響
比如一個字節 1000 0000 (或表示為十六進制 80H)不管是什么順序其內存中的表示法都是這樣。
2、大于1個字節的數據類型才有字節順序問題
比如 Byte A,這個變量只有一個字節的長度,所以根據上一條沒有字節順序問題。所以字節順序是“字節之間的相對順序”的意思。
3、大于1個字節的數據類型的字節順序有兩種
比如 short B,這是一個兩字節的數據類型,這時就有字節之間的相對順序問題了。
網絡字節順序是“所見即所得”的順序。而Intel類型的CPU的字節順序與此相反。
比如上面的 short B=0102H(十六進制,每兩位表示一個字節的寬度)。所見到的是“0102”,按一般數學常識,數軸從左到右的方向增加,即內存地址從左到右增加的話,在內存中這個 short B的字節順序是:
01 02
這就是網絡字節順序。所見到的順序和在內存中的順序是一致的!
而相反的字節順序就不同了,其在內存中的順序為:02 01
假設通過抓包得到網絡數據的兩個字節流為:01 02
如果這表示兩個 Byte類型的變量,那么自然不需要考慮字節順序的問題。
如果這表示一個 short 變量,那么就需要考慮字節順序問題。根據網絡字節順序“所見即所得”的規則,這個變量的值就是:0102
假設本地主機是Intel類型的,那么要表示這個變量,有點麻煩:
定義變量 short X,
字節流地址為:pt,按順序讀取內存是為
x=*((short*)pt);
那么X的內存順序當然是 01 02
按非“所見即所得”的規則,這個內存順序和看到的一樣顯然是不對的,所以要把這兩個字節的位置調換。
調換的方法可以自己定義,但用已經有的API還是更為方便。

網絡字節順序與主機字節順序
NBO與HBO 網絡字節順序NBO(Network Byte Order):按從高到低的順序存儲,在網絡上使用統一的網絡字節順序,可以避免兼容性問題。主機字節順序(HBO,Host Byte Order):不同的機器HBO不相同,與CPU設計有關計算機數據存儲有兩種字節優先順序:高位字節優先和低位字節優先。Internet上數據以高位字節優先順序在網絡上傳輸,所以對于在內部是以低位字節優先方式存儲數據的機器,在Internet上傳輸數據時就需要進行轉換。 

htonl()
簡述:
    將主機的無符號長整形數轉換成網絡字節順序。
    #include <winsock.h>
    u_long PASCAL FAR htonl( u_long hostlong);
    hostlong:主機字節順序表達的32位數。
注釋:
    本函數將一個32位數從主機字節順序轉換成網絡字節順序。
返回值:
    htonl()返回一個網絡字節順序的值。

inet_ntoa()
簡述:
將網絡地址轉換成“.”點隔的字符串格式。
#include <winsock.h>
char FAR* PASCAL FAR inet_ntoa( struct in_addr in);
in:一個表示Internet主機地址的結構。
注釋:
本函數將一個用in參數所表示的Internet地址結構轉換成以“.” 間隔的諸如“a.b.c.d”的字符串形式。請注意inet_ntoa()返回的字符串存放在WINDOWS套接口實現所分配的內存中。應用程序不應假設該內存是如何分配的。在同一個線程的下一個WINDOWS套接口調用前,數據將保證是有效。
返回值:
若無錯誤發生,inet_ntoa()返回一個字符指針。否則的話,返回NULL。其中的數據應在下一個WINDOWS套接口調用前復制出來。

網絡中傳輸的數據有的和本地字節存儲順序一致,而有的則截然不同,為了數據的一致性,就要把本地的數據轉換成網絡上使用的格式,然后發送出去,接收的時候也是一樣的,經過轉換然后才去使用這些數據,基本的庫函數中提供了這樣的可以進行字節轉換的函數,如和htons( ) htonl( ) ntohs( ) ntohl( ),這里n表示network,h表示host,htons( ) htonl( )用于本地字節向網絡字節轉換的場合,s表示short,即對2字節操作,l表示long即對4字節操作。同樣ntohs( )ntohl( )用于網絡字節向本地格式轉換的場合。

posted on 2011-09-21 13:03 simplyzhao 閱讀(255) 評論(0)  編輯 收藏 引用 所屬分類: R_找工復習2011

導航

<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

統計

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲伦理精品| 国产精品亚洲不卡a| 久久米奇亚洲| 欧美一区二区三区日韩| 亚洲一区二区三区在线播放| 一区二区三区av| 在线亚洲精品福利网址导航| 一本综合久久| 亚洲制服av| 亚洲女人小视频在线观看| 亚洲一区二区精品视频| 亚洲一级电影| 欧美在线视频免费观看| 久久久久国色av免费看影院| 西瓜成人精品人成网站| 欧美一级欧美一级在线播放| 欧美一区二视频| 久久精品视频免费观看| 麻豆成人小视频| 欧美激情一区二区三区| 欧美成人日韩| 日韩五码在线| 久久精品国产免费| 欧美国产日产韩国视频| 久久久综合免费视频| 久久国产精品久久精品国产| 9l国产精品久久久久麻豆| 亚洲欧美国产精品桃花| 免费不卡亚洲欧美| 国产精品毛片在线看| 影音先锋另类| 中文精品在线| 欧美成人亚洲成人| 亚洲先锋成人| 免费永久网站黄欧美| 国产精品专区第二| 亚洲激情偷拍| 午夜视频在线观看一区| 男人的天堂亚洲| 日韩视频在线一区| 久久av二区| 欧美日韩网站| 伊人婷婷欧美激情| 亚洲欧美一区二区激情| 欧美国产欧美综合| 欧美专区在线播放| 国产精品扒开腿做爽爽爽软件| 久久国产精品72免费观看| 欧美精品系列| 国产在线日韩| 亚洲一区尤物| 亚洲黄色高清| 亚洲一级黄色片| 欧美成人免费一级人片100| 国产精品久久久久久久浪潮网站| 在线不卡中文字幕| 欧美专区日韩视频| 国产精品婷婷| 亚洲无亚洲人成网站77777| 亚洲国产一区二区三区青草影视| 久久精品1区| 国产日韩在线亚洲字幕中文| 亚洲午夜电影| 亚洲人成高清| 欧美激情综合五月色丁香| 最新成人av在线| 久久婷婷国产综合国色天香| 亚洲桃花岛网站| 欧美日韩美女在线| 日韩视频一区二区在线观看| 亚洲国产欧美一区二区三区久久| 欧美一区91| 国产精品揄拍500视频| 亚洲欧美日韩国产综合| 中文欧美在线视频| 亚洲一区二区三区高清| 欧美国产日韩在线| 欧美午夜剧场| 午夜精品久久久久99热蜜桃导演| 久久综合导航| 久久国产精品免费一区| 欧美一区免费视频| 香蕉乱码成人久久天堂爱免费| 国产精品美女久久久浪潮软件| 亚洲午夜一级| 亚洲综合日韩| 国语自产精品视频在线看抢先版结局 | 在线欧美三区| 蜜臀av国产精品久久久久| 久久深夜福利| 亚洲激情欧美| 一二三区精品| 国产人成一区二区三区影院| 久久人人97超碰人人澡爱香蕉| 欧美一区日韩一区| 亚洲高清网站| 亚洲精品久久久久久一区二区| 欧美日韩国产成人精品| 午夜久久tv| 欧美专区福利在线| 亚洲茄子视频| 一区二区三区你懂的| 国产日韩欧美麻豆| 欧美日韩国内| 久久精品亚洲热| 亚洲日韩欧美视频| 国产精品自拍网站| 欧美激情第一页xxx| 欧美三日本三级少妇三99| 欧美一区二区免费| 美女福利精品视频| 亚洲综合国产激情另类一区| 亚洲欧美一区二区三区久久| 一区二区三区在线看| 亚洲欧洲日产国码二区| 国产在线精品二区| 亚洲一级片在线观看| 亚洲精品久久久久久久久久久| 亚洲一区在线播放| aa级大片欧美三级| 久久久久成人精品| 亚洲尤物视频网| 欧美成人精品1314www| 久久精品国产久精国产一老狼| 欧美乱人伦中文字幕在线| 久久久久国产精品人| 国产精品大片免费观看| 欧美激情亚洲激情| 狠狠干成人综合网| 亚洲第一伊人| 亚洲午夜黄色| 亚洲国产小视频在线观看| 国产九九精品视频| 久久精品视频亚洲| 亚洲国产一区二区三区高清| 久久精品免费电影| 99在线精品视频| 六月婷婷一区| 美女脱光内衣内裤视频久久网站| 欧美视频在线观看一区| 亚洲高清资源| 亚洲成人在线免费| 欧美一区二区高清| 午夜精品一区二区三区电影天堂| 欧美伦理91i| 亚洲精品乱码久久久久久黑人 | 国产美女精品一区二区三区| 中文精品视频| 欧美一级夜夜爽| 国产日韩精品一区二区| 欧美一区二区在线免费观看| 久久精品日韩欧美| 伊人久久男人天堂| 欧美有码在线观看视频| 久久麻豆一区二区| 亚洲激情二区| 欧美大片在线观看| 亚洲美女福利视频网站| 国产精品99久久久久久宅男| 麻豆精品视频| 亚洲另类一区二区| 欧美日韩免费在线观看| 99一区二区| 欧美一区免费视频| 在线中文字幕日韩| 欧美一区二区三区四区在线| 国产精品夜夜夜| 久久精品欧美日韩精品| 欧美韩日一区二区| 一区二区三区四区国产精品| 国产精品久久九九| 欧美亚洲色图校园春色| 免费亚洲一区二区| 99热在线精品观看| 国产精品网站视频| 久久色在线播放| 夜夜嗨av一区二区三区网页| 欧美一区亚洲二区| 伊伊综合在线| 欧美日韩在线观看一区二区| 亚洲欧美一区二区三区在线 | 亚洲欧洲在线视频| 国产精品网站在线观看| 美女精品在线观看| 亚洲午夜精品一区二区三区他趣| 久久三级视频| 一区二区精品国产| 伊人久久婷婷色综合98网| 欧美色一级片| 久久久精品性| 亚洲一本视频| 亚洲国产精品久久人人爱蜜臀| 欧美亚洲网站| 亚洲精品一线二线三线无人区| 午夜亚洲性色福利视频| 亚洲一区二区三区激情| 欧美激情精品久久久久久久变态 | 午夜亚洲性色福利视频| 亚洲国产欧美一区二区三区同亚洲 | 国产精品一区久久久|