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

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>
            亚洲一级网站| 合欧美一区二区三区| 欧美电影在线| 好吊一区二区三区| 在线综合亚洲欧美在线视频| 欧美亚洲视频在线看网址| 亚洲欧洲视频在线| 欧美一区二区三区啪啪| 国产欧美日韩视频一区二区| 亚洲欧洲在线看| 久久久久久欧美| 亚洲一区二区三区在线播放| 久久久久久自在自线| 国产婷婷色一区二区三区| 99国内精品久久| 久久精品水蜜桃av综合天堂| 亚洲欧美日本国产有色| 欧美日韩国产色综合一二三四| 亚洲美女电影在线| 奶水喷射视频一区| 奶水喷射视频一区| 红桃视频欧美| 亚洲专区国产精品| 国产精品久久二区二区| 在线视频欧美一区| 欧美国产精品中文字幕| 老鸭窝毛片一区二区三区| 国产日韩一区二区三区在线播放| 亚洲精品午夜精品| 日韩视频在线观看免费| 免费日韩一区二区| 亚洲国产日韩欧美综合久久| 久久永久免费| 亚洲欧美日韩在线不卡| 在线综合亚洲| 国产精品v日韩精品| 亚洲女优在线| 欧美啪啪成人vr| 久久久久一区| 卡一卡二国产精品| 欧美三区在线观看| 欧美视频日韩| 亚洲国产日韩欧美一区二区三区| 亚洲一区二区网站| 国产一区999| 久久久999精品| 欧美一二三视频| 最新国产拍偷乱拍精品| 欧美大秀在线观看| 欧美日一区二区在线观看| 亚洲欧美日韩中文播放| 久久久久国产精品厨房| 欧美国产日本韩| 欧美一区二区三区精品电影| 欧美freesex交免费视频| 久久久国产91| 亚洲午夜av| 亚洲一区二区毛片| 欧美精品午夜视频| 久久精品成人| 久久综合电影| 亚洲一二三四久久| 性欧美大战久久久久久久久| 亚洲作爱视频| 久久国产精品久久国产精品 | 亚洲人成网站在线播| 国产美女高潮久久白浆| 免费观看一区| 国产日韩久久| 亚洲国产婷婷香蕉久久久久久| 久久久久久高潮国产精品视| 亚洲免费一在线| 久久嫩草精品久久久久| 久久疯狂做爰流白浆xx| 女仆av观看一区| 老司机精品导航| 欧美日韩国产999| 久久婷婷国产麻豆91天堂| 国产精品日韩精品欧美在线| 欧美成人资源| 亚洲丶国产丶欧美一区二区三区 | 欧美激情一区二区三区高清视频| 久久精品盗摄| 欧美日韩成人在线| 亚洲精品国精品久久99热一| 国产午夜精品久久久久久免费视| 免费久久99精品国产| 国外成人免费视频| 亚洲日本欧美在线| 久久久五月婷婷| 欧美日韩一区二区国产| 亚洲国产精品va在线看黑人动漫 | 久久久水蜜桃| 欧美一级专区免费大片| 国产美女精品| 中国成人黄色视屏| 日韩五码在线| 欧美日本二区| 欧美激情二区三区| 亚洲国产综合91精品麻豆| 久久国产直播| 女女同性女同一区二区三区91| 国产片一区二区| 亚洲网站视频福利| 欧美一区日韩一区| 欧美亚洲不卡| 午夜精品亚洲一区二区三区嫩草| 一本综合久久| 久久综合中文字幕| 亚洲激情在线观看视频免费| 在线观看日韩专区| 欧美成人官网二区| 欧美国产精品劲爆| 亚洲一区二区三区高清| 国产精品99免费看| 蜜臀av在线播放一区二区三区| 亚洲国产一区二区视频| 老司机久久99久久精品播放免费| 亚洲国产成人高清精品| 在线精品亚洲一区二区| 欧美国产精品v| 日韩亚洲欧美一区| 中文高清一区| 樱花yy私人影院亚洲| 久久免费99精品久久久久久| 亚洲九九九在线观看| 亚洲一区观看| 一区二区视频免费完整版观看| 久久久久久久久岛国免费| 先锋影音一区二区三区| 亚洲第一色中文字幕| 欧美激情精品久久久久久黑人| 亚洲天堂成人在线观看| 欧美一区二区三区在线视频| 亚洲第一主播视频| 欧美日韩免费一区二区三区视频| 欧美激情一二三区| 欧美在线一二三区| 影音先锋久久久| 国产精品久久久久久久电影 | 午夜精品在线看| 黄色精品在线看| 欧美国产日韩xxxxx| 欧美激情一区二区三区| 久久精品国产亚洲一区二区三区| 有码中文亚洲精品| 国产三区精品| 欧美a级片网| 久久精品国产综合精品| 亚洲三级免费观看| 亚洲私人影院在线观看| 在线看片日韩| 国产精品免费在线| 亚洲桃花岛网站| 久久麻豆一区二区| 亚洲一区日韩在线| 亚洲电影一级黄| 欧美日韩国产精品自在自线| 欧美大片免费久久精品三p| 亚洲一区二区精品视频| 尤物精品国产第一福利三区| 欧美日韩视频免费播放| 久久激情五月激情| 午夜宅男久久久| 亚洲精品色婷婷福利天堂| 欧美国产日本高清在线| 午夜日韩福利| 午夜精品久久久久久久久久久久久 | 狠狠色狠狠色综合日日五| 欧美久久视频| 欧美有码视频| 一本久久综合亚洲鲁鲁| 老司机精品久久| 久久在精品线影院精品国产| 亚洲一区二区在线观看视频| 日韩亚洲欧美一区| 一区二区亚洲精品| 韩国v欧美v日本v亚洲v| 国产精品国产馆在线真实露脸| 久久久99爱| 久久青青草综合| 午夜在线观看免费一区| 欧美一区在线直播| 亚洲一区二区久久| 欧美资源在线| 欧美一区二区三区久久精品| 欧美在线观看天堂一区二区三区| 在线视频日本亚洲性| 一区二区欧美国产| 亚洲另类自拍| 蜜臀av一级做a爰片久久| 亚洲国产精品一区二区尤物区| 男女精品网站| 欧美激情五月| 亚洲观看高清完整版在线观看| 亚洲欧洲日本在线| 亚洲激情自拍| 一区二区三区www| 99综合精品| 欧美在线一区二区|