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

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>
            国产精品一区2区| 久久尤物电影视频在线观看| 久久午夜精品一区二区| 欧美人成在线视频| 亚洲成色777777女色窝| 欧美99久久| 亚洲区中文字幕| 久久国产日本精品| 国产一区二区三区四区| 一区二区三区四区在线| 亚洲欧美www| av不卡免费看| 欧美日韩国产成人在线| 亚洲在线成人| 久久国产加勒比精品无码| 欧美日本在线播放| 久久久www成人免费无遮挡大片| 亚洲人成人一区二区在线观看| 亚洲欧美卡通另类91av| 亚洲毛片播放| 欧美成人一区在线| 日韩特黄影片| 激情五月婷婷综合| 国产一区二区高清| 国产一区二区成人| 精品69视频一区二区三区| 国产精品久久久久秋霞鲁丝| 欧美成人一区二区三区片免费| 免费毛片一区二区三区久久久| 亚洲视频免费在线观看| 亚洲一二三区在线| 中文av字幕一区| 亚洲国产精彩中文乱码av在线播放| 国产自产女人91一区在线观看| 欧美性猛交xxxx乱大交退制版| 欧美一区二区视频免费观看| 久久亚洲春色中文字幕| 激情五月综合色婷婷一区二区| 国产亚洲成av人在线观看导航| 国产精品视频福利| 国产精品资源| 一色屋精品视频免费看| 亚洲国产欧美久久| 亚洲激情综合| 亚洲自拍偷拍视频| avtt综合网| 亚洲精品日本| 99视频在线观看一区三区| 亚洲人成在线播放| 亚洲欧美bt| 亚洲在线免费观看| 久久国产精品久久国产精品| 午夜亚洲伦理| 欧美一区二视频| 你懂的亚洲视频| 久久精品一区二区三区不卡牛牛| 欧美激情一区二区三区四区| 久热国产精品| 欧美全黄视频| 亚洲福利视频三区| 美女图片一区二区| 国产精品99久久不卡二区| 亚洲欧美日韩区| 国产精品久久久久久久久免费樱桃| 国产精品一区二区你懂的| 狠狠综合久久av一区二区老牛| av不卡在线观看| 女人香蕉久久**毛片精品| 一区二区三区视频在线播放| 欧美三级免费| 亚洲永久免费av| 欧美一区观看| 国产免费成人av| 亚洲午夜精品久久久久久浪潮| 亚洲丰满在线| 日韩视频精品在线| 欧美电影免费观看| 欧美精品日韩精品| 欧美一区二区三区免费视| 欧美成人在线免费观看| 国产精品视频一| 在线视频欧美日韩精品| 亚洲尤物视频网| 亚洲免费精彩视频| 另类天堂av| 亚洲精品一区二| 91久久一区二区| 99在线热播精品免费99热| 欧美日韩成人在线| 亚洲在线黄色| 久久久久久成人| 欧美一区二区久久久| 久久国产视频网| 日韩网站在线看片你懂的| 久久精品视频免费| 国产日韩精品一区二区三区 | 91久久综合| 亚洲午夜高清视频| 亚洲日本电影在线| 欧美一区日本一区韩国一区| 99一区二区| 亚洲国产精品一区制服丝袜 | 亚洲美女中文字幕| 亚洲电影免费在线| 一区二区三区四区国产精品| 免费一区二区三区| 欧美成人精品| 国内精品久久久久影院薰衣草| 久久精品道一区二区三区| 欧美刺激午夜性久久久久久久| 黄色在线一区| 免费观看欧美在线视频的网站| 奶水喷射视频一区| 国产精品第一区| 亚洲深夜福利网站| 在线观看一区欧美| 久久精品一二三区| 亚洲三级性片| 国产片一区二区| 欧美成人综合网站| 亚洲精品一品区二品区三品区| 亚洲一级黄色| 亚洲欧洲日韩综合二区| 欧美成人蜜桃| 国产精品尤物福利片在线观看| 亚洲韩国青草视频| 国产精品久久久久久超碰| 99视频热这里只有精品免费| 国产综合视频| 久久国产黑丝| 久久成人亚洲| 欧美成人激情在线| 久久亚洲二区| 国产精品久久久久久久久久久久| 性色av香蕉一区二区| 国产日韩av在线播放| 亚洲天堂免费观看| 亚洲精品一区二区三区av| 欧美插天视频在线播放| 欧美阿v一级看视频| 午夜精品成人在线视频| 你懂的国产精品永久在线| 欧美日韩一区二区欧美激情 | 在线成人h网| 亚洲精品久久久久久久久| 揄拍成人国产精品视频| 欧美性猛片xxxx免费看久爱| 欧美午夜精品一区| 欧美亚洲一区二区在线| 国产日韩欧美一区二区三区在线观看 | 欧美亚洲免费高清在线观看| 在线一区欧美| 国产精品av免费在线观看| 欧美制服第一页| 欧美在线播放| 免费一区二区三区| 亚洲国产高清一区| 欧美精品电影| 亚洲欧美一区二区原创| 日韩午夜激情电影| 99ri日韩精品视频| 亚洲高清视频中文字幕| 亚洲美女精品成人在线视频| 亚洲少妇自拍| 亚洲高清在线精品| 亚洲欧洲美洲综合色网| 欧美日韩精品在线观看| 亚洲裸体视频| 亚洲激情欧美激情| 国产精品成人v| 一本色道久久综合精品竹菊 | 亚洲精品一区久久久久久| 中日韩美女免费视频网址在线观看| 国产日韩精品一区二区| 久久久五月天| 激情91久久| 在线观看欧美精品| 国产精品入口福利| 国产精品视频一二三| 久久久亚洲高清| 亚洲网站在线观看| 国产精品二区在线观看| 亚洲国产天堂网精品网站| 午夜精品一区二区三区在线播放| 一本久久a久久免费精品不卡| 国产精品久99| 国产亚洲人成网站在线观看| 伊人激情综合| 伊人狠狠色j香婷婷综合| 一区二区三区蜜桃网| 国产九九精品视频| 国产精品人成在线观看免费| 久久久99国产精品免费| 亚洲国产成人在线| 精品999久久久| 在线播放亚洲| 在线观看视频免费一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 欧美成人免费在线观看| 午夜精品福利电影|