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

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

導航

<2011年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

統計

常用鏈接

留言簿(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>
            久久夜色精品国产| 国产精品色一区二区三区| 最近中文字幕日韩精品| 欧美在线一二三四区| 亚洲久久在线| 亚洲国产成人午夜在线一区| 国产亚洲欧美中文| 国内精品久久久久久久果冻传媒 | 久久男女视频| 久久久久9999亚洲精品| 久久视频这里只有精品| 麻豆久久久9性大片| 久久gogo国模啪啪人体图| 亚洲综合不卡| 久久国产成人| 久久久国产精品一区二区中文 | 中文精品视频| 中文网丁香综合网| 欧美亚洲尤物久久| 久久夜色精品国产| 欧美日韩123| 国产精品久久久免费| 国产精品日韩在线播放| 国产日韩欧美日韩大片| 影音先锋国产精品| 99精品欧美一区二区三区| 亚洲日韩成人| 亚洲欧美综合精品久久成人| 中文av字幕一区| 欧美成人免费大片| 欧美寡妇偷汉性猛交| 久久婷婷国产综合精品青草| 欧美一级免费视频| 久久精品国产999大香线蕉| 亚洲伊人色欲综合网| 日韩亚洲欧美一区二区三区| 亚洲免费观看高清在线观看| 日韩一级黄色av| 亚洲欧美成人网| 男女精品网站| 国产欧美日韩综合| 99精品视频免费观看| 久久久久久高潮国产精品视| 亚洲日本一区二区三区| 亚洲欧美日韩网| 欧美精品一区二区在线播放| 国产视频久久久久久久| aa级大片欧美| 美女诱惑黄网站一区| 亚洲小少妇裸体bbw| 欧美夫妇交换俱乐部在线观看| 国产欧美日韩在线观看| 亚洲午夜在线观看| 欧美韩国在线| 欧美在线视频免费播放| 国产精品国产三级国产专播品爱网 | 另类春色校园亚洲| 国产一区二区在线观看免费播放 | 蜜桃av噜噜一区二区三区| 亚洲天堂免费在线观看视频| 欧美激情视频一区二区三区免费 | 久久精品首页| 性做久久久久久免费观看欧美| 国产精品jizz在线观看美国| 日韩视频在线观看免费| 欧美激情视频一区二区三区免费| 欧美在线看片| 国产综合色在线视频区| 久久九九热免费视频| 亚洲免费一级电影| 国产精品国产自产拍高清av| 亚洲一区二区三区777| 亚洲欧洲三级| 欧美日韩成人一区二区| 99热免费精品| 久久综合狠狠综合久久综青草| 欧美福利电影网| 亚洲一区精品在线| 欧美日韩色综合| 久久偷窥视频| 国产精品国产a| 欧美成人精品一区| 国产麻豆精品视频| 欧美专区亚洲专区| 亚洲欧美激情在线视频| 亚洲精品免费观看| 欧美日韩精品免费| 国产精品青草久久| 亚洲免费播放| 国产精品青草久久| 久久躁日日躁aaaaxxxx| 亚洲国产精品久久久久秋霞影院| 欧美剧在线免费观看网站| 欧美日韩免费观看一区=区三区| 欧美成人免费在线视频| 亚洲大胆女人| 亚洲欧美高清| 欧美精品国产| 亚洲承认在线| 亚洲裸体俱乐部裸体舞表演av| 日韩视频在线一区二区| 久久九九免费视频| 亚洲精品视频在线| 欧美~级网站不卡| 国产欧美日本一区二区三区| 亚洲激情在线激情| 久久美女性网| 欧美精品一线| 亚洲欧洲日产国产网站| 激情综合在线| 亚洲欧美日韩一区二区在线 | 午夜日韩福利| 欧美激情亚洲| 亚洲黄网站黄| 欧美成人午夜77777| 久久久久久久91| 韩国女主播一区| 欧美日韩在线播放一区二区| 亚洲精品日韩在线观看| 久久久久久一区| 国产亚洲欧美一区二区| 欧美亚洲在线播放| 久久精品一区四区| 欧美综合77777色婷婷| 国产亚洲视频在线| 久久久999精品免费| 久久精彩免费视频| 揄拍成人国产精品视频| 久久一区视频| 欧美国产三区| 亚洲激情一区| 国产精品人人做人人爽| 亚洲欧美国产精品专区久久| 亚洲午夜精品久久久久久app| 欧美日韩一区二区视频在线观看 | 亚洲激情第一页| 欧美日韩国产综合视频在线| 亚洲在线视频一区| 亚洲一区日本| 精品福利av| 亚洲精品色图| 国产精品最新自拍| 亚洲视频在线看| 一区二区高清视频在线观看| 国产精品高潮呻吟视频 | 欧美日韩在线大尺度| 亚洲欧洲在线一区| 国产美女诱惑一区二区| 久久久久久久尹人综合网亚洲| 性欧美长视频| 伊人久久婷婷| 亚洲美洲欧洲综合国产一区| 亚洲与欧洲av电影| 久久只精品国产| 日韩天堂av| 亚洲欧美日韩国产综合精品二区| 国内揄拍国内精品久久| 欧美激情影院| 国产伦精品一区二区三| 久久久久久久999精品视频| 亚洲毛片在线观看| 亚洲毛片在线观看| 精品99一区二区| 亚洲一级二级| 亚洲精选视频免费看| 久久影视精品| 99av国产精品欲麻豆| 亚洲一区二区精品在线观看| 在线精品视频一区二区| 亚洲乱码国产乱码精品精| 国内精品国产成人| av成人福利| 妖精视频成人观看www| 国产日韩精品一区二区三区在线| 亚洲国产精品一区二区尤物区| 亚洲一区二区成人| 亚洲欧洲日夜超级视频| 久久国产精品网站| 欧美一级夜夜爽| 精品动漫3d一区二区三区免费版| 嫩草国产精品入口| 久久中文精品| 国产午夜精品一区二区三区欧美| 亚洲观看高清完整版在线观看| 国外视频精品毛片| 午夜激情久久久| 欧美一区二区成人6969| 亚洲精品黄色| 久久女同精品一区二区| 久久精品理论片| 国产三级精品在线不卡| 亚洲自拍另类| 亚洲欧美怡红院| 日韩亚洲欧美成人一区| 欧美影院成人| 欧美在线视频一区二区| 国产精品日韩一区二区| 午夜精品婷婷| 久久久久久高潮国产精品视| 欧美大片一区二区|