• <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>
            aurain
            技術(shù)文摘
            posts - 137,  comments - 268,  trackbacks - 0
            不同的CPU有不同的字節(jié)序類(lèi)型 這些字節(jié)序是指整數(shù)在內(nèi)存中保存的順序 這個(gè)叫做主機(jī)序 
            最常見(jiàn)的有兩種
            1. Little endian:將低序字節(jié)存儲(chǔ)在起始地址
            2. Big endian:將高序字節(jié)存儲(chǔ)在起始地址

            LE little-endian 
            最符合人的思維的字節(jié)序 
            地址低位存儲(chǔ)值的低位 
            地址高位存儲(chǔ)值的高位 
            怎么講是最符合人的思維的字節(jié)序,是因?yàn)閺娜说牡谝挥^感來(lái)說(shuō) 
            低位值小,就應(yīng)該放在內(nèi)存地址小的地方,也即內(nèi)存地址低位 
            反之,高位值就應(yīng)該放在內(nèi)存地址大的地方,也即內(nèi)存地址高位 

            BE big-endian 
            最直觀的字節(jié)序 
            地址低位存儲(chǔ)值的高位 
            地址高位存儲(chǔ)值的低位 
            為什么說(shuō)直觀,不要考慮對(duì)應(yīng)關(guān)系 
            只需要把內(nèi)存地址從左到右按照由低到高的順序?qū)懗?nbsp;
            把值按照通常的高位到低位的順序?qū)懗?nbsp;
            兩者對(duì)照,一個(gè)字節(jié)一個(gè)字節(jié)的填充進(jìn)去 

            例子:在內(nèi)存中雙字0x01020304(DWORD)的存儲(chǔ)方式 

            內(nèi)存地址 
            4000 4001 4002 4003 
            LE 04 03 02 01 
            BE 01 02 03 04 

            例子:如果我們將0x1234abcd寫(xiě)入到以0x0000開(kāi)始的內(nèi)存中,則結(jié)果為
                  big-endian  little-endian
            0x0000  0x12      0xcd
            0x0001  0x23      0xab
            0x0002  0xab      0x34
            0x0003  0xcd      0x12
            x86系列CPU都是little-endian的字節(jié)序. 

            網(wǎng)絡(luò)字節(jié)順序是TCP/IP中規(guī)定好的一種數(shù)據(jù)表示格式,它與具體的CPU類(lèi)型、操作系統(tǒng)等無(wú)關(guān),從而可以保證數(shù)據(jù)在不同主機(jī)之間傳輸時(shí)能夠被正確解釋。網(wǎng)絡(luò)字節(jié)順序采用big endian排序方式。

            為了進(jìn)行轉(zhuǎn)換 bsd socket提供了轉(zhuǎn)換的函數(shù) 有下面四個(gè)
            htons 把unsigned short類(lèi)型從主機(jī)序轉(zhuǎn)換到網(wǎng)絡(luò)序
            htonl 把unsigned long類(lèi)型從主機(jī)序轉(zhuǎn)換到網(wǎng)絡(luò)序
            ntohs 把unsigned short類(lèi)型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機(jī)序
            ntohl 把unsigned long類(lèi)型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機(jī)序

            在使用little endian的系統(tǒng)中 這些函數(shù)會(huì)把字節(jié)序進(jìn)行轉(zhuǎn)換 
            在使用big endian類(lèi)型的系統(tǒng)中 這些函數(shù)會(huì)定義成空宏

            同樣 在網(wǎng)絡(luò)程序開(kāi)發(fā)時(shí) 或是跨平臺(tái)開(kāi)發(fā)時(shí) 也應(yīng)該注意保證只用一種字節(jié)序 不然兩方的解釋不一樣就會(huì)產(chǎn)生bug.

            注:
            1、網(wǎng)絡(luò)與主機(jī)字節(jié)轉(zhuǎn)換函數(shù):htons ntohs htonl ntohl (s 就是short l是long h是host n是network)
            2、不同的CPU上運(yùn)行不同的操作系統(tǒng),字節(jié)序也是不同的,參見(jiàn)下表。
            處理器    操作系統(tǒng)    字節(jié)排序
            Alpha    全部    Little endian
            HP-PA    NT    Little endian
            HP-PA    UNIX    Big endian
            Intelx86    全部    Little endian <-----x86系統(tǒng)是小端字節(jié)序系統(tǒng)
            Motorola680x()    全部    Big endian
            MIPS    NT    Little endian
            MIPS    UNIX    Big endian
            PowerPC    NT    Little endian
            PowerPC    非NT    Big endian  <-----PPC系統(tǒng)是大端字節(jié)序系統(tǒng)
            RS/6000    UNIX    Big endian
            SPARC    UNIX    Big endian
            IXP1200 ARM核心    全部    Little endian 

            下面是一個(gè)檢驗(yàn)本機(jī)字節(jié)序的簡(jiǎn)便方法:

            //判斷本機(jī)的字節(jié)序
            //返回true表為小段序。返回false表示為大段序
            bool am_little_endian ()
            {
             unsigned short i=1;
             return (int)*((char *)(&i)) ? true : false;
            }
            int main()
            {
              if(am_little_endian())
             {
                       printf("本機(jī)字節(jié)序?yàn)樾《涡?\n");
             }
             else
             {
                      printf("本機(jī)字節(jié)序?yàn)榇蠖涡?\n");
             }
                    return 0;
            }

            posted on 2008-02-18 11:17 閱讀(3407) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): socket編程

            FeedBack:
            # re: 網(wǎng)絡(luò)字節(jié)序與主機(jī)字節(jié)序[未登錄](méi)
            2009-04-20 09:44 | 1
            很好!??!表述很清晰!  回復(fù)  更多評(píng)論
              

            <2009年4月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(17)

            隨筆分類(lèi)(138)

            隨筆檔案(137)

            網(wǎng)絡(luò)開(kāi)發(fā)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 499388
            • 排名 - 36

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            99久久国产综合精品女同图片| 日本人妻丰满熟妇久久久久久| 亚洲日本va午夜中文字幕久久| 狠狠色丁香久久婷婷综合蜜芽五月| 色综合久久天天综线观看| 久久久无码精品亚洲日韩京东传媒 | 精品国产乱码久久久久软件| 久久av无码专区亚洲av桃花岛| 一本色道久久88加勒比—综合| 亚洲精品国精品久久99热| 国产亚洲欧美精品久久久| 色婷婷狠狠久久综合五月| 久久青青草原亚洲av无码app| 国产精品综合久久第一页| 久久夜色精品国产噜噜麻豆| 久久涩综合| 大蕉久久伊人中文字幕| 日韩精品久久无码中文字幕| 久久无码一区二区三区少妇| 久久精品黄AA片一区二区三区| 人妻中文久久久久| 久久精品成人影院| 伊人色综合久久| a高清免费毛片久久| 久久偷看各类wc女厕嘘嘘| 久久久这里只有精品加勒比| 日韩精品国产自在久久现线拍 | 狠狠综合久久综合88亚洲| 久久99精品久久久久久齐齐| 97久久精品人人澡人人爽| 99久久精品国产免看国产一区| 中文精品久久久久人妻不卡| 国内精品九九久久精品| 久久综合亚洲色一区二区三区| 欧美国产成人久久精品| 日韩美女18网站久久精品| 少妇被又大又粗又爽毛片久久黑人| 久久国产一片免费观看| 色8激情欧美成人久久综合电| 久久精品一区二区影院| 久久精品国产精品亚洲艾草网美妙|