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

Young's Blog

包子鋪

使用Bit Field的教訓

總結一下,長點記性:
Bit Field總是從低地址往高地址計算。

DNS的網絡數據中有兩個字節的標志位(下面來自真實數據):
0x81 0x80
這個標志位分別表示:
1... .... .... .... = Response: Message is a response
.000 0... .... .... = Opcode: Standard query (0)
.... .0.. .... .... = Authoritative: Server is not an authority for domain
.... ..0. .... .... = Truncated: Message is not truncated
.... ...1 .... .... = Recursion desired: Do query recursively
.... .... 1... .... = Recursion available: Server can do recursive queries
.... .... .0.. .... = Z: reserved (0)
.... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
.... .... .... 0000 = Reply code: No error (0)

想都沒有再想,下意識地寫了下面的結構體(惡夢開始了):
struct NetworkOrder
{
union{
unsigned short Flags;
struct{
unsigned short Response:1;
unsigned short Opcode:4;
unsigned short Authoritative:1;
unsigned short Truncated:1;
unsigned short RecursionDesired:1;
unsigned short RecursionAvailable:1;
unsigned short Zero:1;
unsigned short AnswerAuthenticated:1;
unsigned short Pad:1;
unsigned short ReplyCode:4;
};
};
};

解析結果當然不對:
{
Flags = 0x8081,
{
Response = 0x1,
Opcode = 0x0,
Authoritative = 0x0,
Truncated = 0x0,
RecursionDesired = 0x1,
RecursionAvailable = 0x0,
Zero = 0x0,
AnswerAuthenticated = 0x0,
Pad = 0x0,
ReplyCode = 0x8
}
}

然后又下意識地想(其實根本沒有經過想的過程,要不然也不會這么慘了),可能是字節序的問題,換成主機序:
struct NetworkOrder
{
    union{
        unsigned short Flags;
        struct{
            unsigned short Response:1;
            unsigned short Opcode:4;
            unsigned short Authoritative:1;
            unsigned short Truncated:1;
            unsigned short RecursionDesired:1;

            unsigned short RecursionAvailable:1;
            unsigned short Zero:1;
            unsigned short AnswerAuthenticated:1;
            unsigned short Pad:1;
            unsigned short ReplyCode:4;
        };  
    };  
};

我靠,結果還不對:
{
Flags = 0x8081,
{
Response = 0x1,
Opcode = 0x0,
Authoritative = 0x0,
Truncated = 0x0,
RecursionDesired = 0x1,

RecursionAvailable = 0x0,
Zero = 0x0,
AnswerAuthenticated = 0x0,
Pad = 0x0,
ReplyCode = 0x8
}
}

這個時候背上直冒冷汗,這么簡單的問題自己都沒搞定,快速從腦海中掃了一遍char、short、int在處理數據上的差異......想了半天,
只好用最后的笨辦法了,看一下到底是怎么回事,再次改變一下結構:
struct NetworkOrder3
{
    union{
        unsigned short Flags;
        struct{
            unsigned short A0:1;
            unsigned short A1:1;
            unsigned short A2:1;
            unsigned short A3:1;

            unsigned short B0:1;
            unsigned short B1:1;
            unsigned short B2:1;
            unsigned short B3:1;

            unsigned short C0:1;
            unsigned short C1:1;
            unsigned short C2:1;
            unsigned short C3:1;

            unsigned short D0:1;
            unsigned short D1:1;
            unsigned short D2:1;
            unsigned short D3:1;
        };
    };
};
結果出來一看,恍然大悟:
{
Flags = 0x8081,
{
A0 = 0x1,
A1 = 0x0,
A2 = 0x0,
A3 = 0x0,

B0 = 0x0,
B1 = 0x0,
B2 = 0x0,
B3 = 0x1,

C0 = 0x0,
C1 = 0x0,
C2 = 0x0, 
C3 = 0x0,

D0 = 0x0,
D1 = 0x0,
D2 = 0x0,
D3 = 0x1
}
}
我靠,平時Bit Field用得少,老是一個字節,兩個字節地考慮,忘了它從低地址開始一位一位往上計算的,修改最后的結構,得到正確的結果:
struct NetworkOrder4
{
    union{
        unsigned short Flags;
        struct{
            unsigned short RecursionDesired:1;
            unsigned short Truncated:1;
            unsigned short Authoritative:1;
            unsigned short Opcode:4;
            unsigned short Response:1;

            unsigned short ReplyCode:4;
            unsigned short Pad:1;
            unsigned short AnswerAuthenticated:1;
            unsigned short Zero:1;
            unsigned short RecursionAvailable:1;
        };
    };
};
結果:
{
Flags = 0x8081,
{
RecursionDesired = 0x1,
Truncated = 0x0,
Authoritative = 0x0,
Opcode = 0x0,
Response = 0x1,

ReplyCode = 0x0,
Pad = 0x0,
AnswerAuthenticated = 0x0,
Zero = 0x0,
RecursionAvailable = 0x1
}
}

真是慚愧啊,好記性不如爛筆頭,記在這里引以為簽。




posted on 2010-01-31 00:00 Young 閱讀(793) 評論(1)  編輯 收藏 引用

Feedback

# re: 使用Bit Field的教訓 2010-02-08 16:37 ABC

更新好慢啊。。。  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品美女在线观看| 国产一区在线看| a91a精品视频在线观看| 亚洲国产成人91精品| 欧美ed2k| 亚洲国产美女精品久久久久∴| 男男成人高潮片免费网站| 欧美国产精品日韩| 亚洲精品四区| 亚洲欧美日韩精品久久亚洲区| 性欧美videos另类喷潮| 久久一区二区三区四区| 欧美激情自拍| 国产精品亚洲综合色区韩国| 激情小说另类小说亚洲欧美| 亚洲欧洲精品一区二区三区不卡 | 99精品视频免费观看视频| 日韩午夜免费视频| 亚洲免费一区二区| 久久天堂精品| 欧美视频三区在线播放| 国产亚洲日本欧美韩国| 亚洲精品中文在线| 欧美在线视频免费| 美女露胸一区二区三区| 亚洲理伦电影| 久久福利一区| 欧美少妇一区| 亚洲黄色影片| 久久精品国产69国产精品亚洲 | 黄色成人在线网址| 亚洲国产精品久久精品怡红院| 一区二区三区免费观看| 久久久久久久97| 99综合在线| 久久久91精品国产| 欧美日韩国产天堂| 在线看片一区| 久久精品午夜| 亚洲色图综合久久| 欧美插天视频在线播放| 国产亚洲成av人片在线观看桃| 国产欧美日韩在线| 黄色成人在线免费| 亚洲欧美另类综合偷拍| 欧美va天堂va视频va在线| 在线天堂一区av电影| 欧美 日韩 国产一区二区在线视频 | 欧美激情精品久久久久久久变态| 国产乱码精品一区二区三区不卡| 一本一本a久久| 亚洲黄色在线| 欧美韩日一区二区三区| 91久久国产自产拍夜夜嗨| 久久中文在线| 久久久国产成人精品| 国产视频一区免费看| 欧美在线视频一区二区| 中文在线不卡视频| 国产精品免费观看视频| 午夜亚洲视频| 亚洲欧美色婷婷| 国产日韩一区欧美| 久久久久久久综合色一本| 午夜亚洲视频| 国产视频观看一区| 久久久亚洲午夜电影| 久久成人精品无人区| 永久免费精品影视网站| 久久精品国产999大香线蕉| 亚洲一级网站| 国产区精品视频| 久久精品在线视频| 国产精品亚洲不卡a| 午夜亚洲视频| 久久精品亚洲精品| 亚洲激情一区二区| 亚洲片国产一区一级在线观看| 欧美国产一区二区在线观看| 日韩视频一区二区在线观看 | 欧美大片免费久久精品三p| 91久久亚洲| 夜夜爽www精品| 国产精品区二区三区日本| 久久免费偷拍视频| 欧美黄在线观看| 香蕉尹人综合在线观看| 久久精品最新地址| 一级日韩一区在线观看| 亚洲一区二区精品在线观看| 国产欧美在线观看一区| 欧美第一黄色网| 欧美日韩国产综合视频在线观看| 性欧美videos另类喷潮| 久久伊人一区二区| 一区二区成人精品| 香蕉免费一区二区三区在线观看 | 亚洲一区二区综合| 午夜精品美女自拍福到在线| 在线观看一区二区视频| 亚洲人成网站777色婷婷| 国产麻豆一精品一av一免费| 欧美高清视频一区| 国产精品视频内| 欧美国产日韩一区二区在线观看 | 一区二区三区 在线观看视| 激情一区二区| 亚洲午夜电影| 亚洲精品乱码久久久久久日本蜜臀 | 国产精品久久影院| 欧美成人精品一区二区三区| 欧美日韩精品久久久| 久久婷婷久久一区二区三区| 欧美特黄a级高清免费大片a级| 久久亚洲视频| 国产欧美一区二区三区国产幕精品| 欧美激情精品久久久久久变态| 国产欧美日韩视频在线观看| 亚洲精品美女在线| 亚洲黄色小视频| 久久久五月天| 欧美在线一区二区三区| 国产精品v片在线观看不卡| 亚洲激情女人| 在线免费高清一区二区三区| 欧美一区二区三区另类| 亚洲欧美日韩一区二区在线 | 亚洲伊人网站| 亚洲欧美日本日韩| 欧美日韩一区自拍| 亚洲娇小video精品| 在线免费观看视频一区| 欧美在线视频一区二区| 欧美在线三级| 国产精品私房写真福利视频 | 欧美激情视频网站| 欧美黄网免费在线观看| 在线国产欧美| 蜜桃伊人久久| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲国产视频一区二区| 美女脱光内衣内裤视频久久影院 | 午夜视频在线观看一区二区三区| 在线不卡亚洲| 欧美一级精品大片| 国产精品国产自产拍高清av| 亚洲六月丁香色婷婷综合久久| 亚洲第一精品在线| 久久综合影音| 亚洲欧洲另类国产综合| 亚洲黄色小视频| 欧美黄色一区| 这里只有精品电影| 西瓜成人精品人成网站| 国产一区二区三区网站| 欧美伊久线香蕉线新在线| 老鸭窝毛片一区二区三区| 亚洲黄色大片| 欧美日韩一区在线观看| 亚洲视频欧洲视频| 久久精品青青大伊人av| 亚洲黄色性网站| 欧美涩涩视频| 久久精品观看| 亚洲欧洲一区二区三区久久| 国产精品99久久久久久人| 国产精品日日摸夜夜添夜夜av | 欧美人与性动交cc0o| 亚洲免费中文| 欧美国产专区| 亚洲一区二区黄| 国内精品久久久久久影视8| 牛人盗摄一区二区三区视频| av成人国产| 久久综合福利| 亚洲欧美中文日韩在线| 永久555www成人免费| 国产精品video| 久久久精品国产一区二区三区| 日韩视频免费| 欧美va亚洲va国产综合| 亚洲主播在线| 亚洲黄色天堂| 国产综合av| 欧美天堂在线观看| 久久久久亚洲综合| 亚洲欧美成人一区二区在线电影 | 韩国一区二区在线观看| 欧美日韩免费在线| 久久精品一区蜜桃臀影院| 日韩视频在线永久播放| 久久精品一本久久99精品| 宅男噜噜噜66一区二区66| 亚洲高清精品中出| 国产精品一区一区三区| 欧美日韩三级电影在线| 免费观看亚洲视频大全| 久久精品五月| 欧美亚洲专区| 亚洲主播在线播放|