• <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
            技術文摘
            posts - 137,  comments - 268,  trackbacks - 0
            不同的CPU有不同的字節序類型 這些字節序是指整數在內存中保存的順序 這個叫做主機序 
            最常見的有兩種
            1. Little endian:將低序字節存儲在起始地址
            2. Big endian:將高序字節存儲在起始地址

            LE little-endian 
            最符合人的思維的字節序 
            地址低位存儲值的低位 
            地址高位存儲值的高位 
            怎么講是最符合人的思維的字節序,是因為從人的第一觀感來說 
            低位值小,就應該放在內存地址小的地方,也即內存地址低位 
            反之,高位值就應該放在內存地址大的地方,也即內存地址高位 

            BE big-endian 
            最直觀的字節序 
            地址低位存儲值的高位 
            地址高位存儲值的低位 
            為什么說直觀,不要考慮對應關系 
            只需要把內存地址從左到右按照由低到高的順序寫出 
            把值按照通常的高位到低位的順序寫出 
            兩者對照,一個字節一個字節的填充進去 

            例子:在內存中雙字0x01020304(DWORD)的存儲方式 

            內存地址 
            4000 4001 4002 4003 
            LE 04 03 02 01 
            BE 01 02 03 04 

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

            網絡字節順序是TCP/IP中規定好的一種數據表示格式,它與具體的CPU類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋。網絡字節順序采用big endian排序方式。

            為了進行轉換 bsd socket提供了轉換的函數 有下面四個
            htons 把unsigned short類型從主機序轉換到網絡序
            htonl 把unsigned long類型從主機序轉換到網絡序
            ntohs 把unsigned short類型從網絡序轉換到主機序
            ntohl 把unsigned long類型從網絡序轉換到主機序

            在使用little endian的系統中 這些函數會把字節序進行轉換 
            在使用big endian類型的系統中 這些函數會定義成空宏

            同樣 在網絡程序開發時 或是跨平臺開發時 也應該注意保證只用一種字節序 不然兩方的解釋不一樣就會產生bug.

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

            下面是一個檢驗本機字節序的簡便方法:

            //判斷本機的字節序
            //返回true表為小段序。返回false表示為大段序
            bool am_little_endian ()
            {
             unsigned short i=1;
             return (int)*((char *)(&i)) ? true : false;
            }
            int main()
            {
              if(am_little_endian())
             {
                       printf("本機字節序為小段序!\n");
             }
             else
             {
                      printf("本機字節序為大段序!\n");
             }
                    return 0;
            }

            posted on 2008-02-18 11:17 閱讀(3400) 評論(1)  編輯 收藏 引用 所屬分類: socket編程

            FeedBack:
            # re: 網絡字節序與主機字節序[未登錄]
            2009-04-20 09:44 | 1
            很好!!!表述很清晰!  回復  更多評論
              

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(17)

            隨筆分類(138)

            隨筆檔案(137)

            網絡開發

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 497583
            • 排名 - 36

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲精品乱码久久久久久按摩| 午夜不卡888久久| 久久久久久久91精品免费观看| 99久久香蕉国产线看观香 | 国产精品美女久久久久久2018| 久久久噜噜噜www成人网| 日本三级久久网| 伊人久久精品无码二区麻豆| 色综合久久无码五十路人妻| 国产精久久一区二区三区| 久久久久国产精品嫩草影院| 国产亚洲欧美成人久久片| 亚洲欧美国产精品专区久久| 国产精品久久久久久久久鸭| 亚洲欧美一区二区三区久久| 久久99精品国产一区二区三区| 久久久国产亚洲精品| 久久精品国产半推半就| 人妻少妇久久中文字幕一区二区| 久久天天躁狠狠躁夜夜av浪潮| 99久久无码一区人妻a黑| 欧美亚洲国产精品久久久久| 亚洲成人精品久久| 久久精品成人免费网站| 久久久无码精品亚洲日韩按摩| 亚州日韩精品专区久久久| 亚洲狠狠久久综合一区77777 | 一本色道久久88精品综合| 久久精品无码一区二区app| 久久se精品一区精品二区| 久久精品国产亚洲AV电影| 久久发布国产伦子伦精品 | 成人妇女免费播放久久久| 无码人妻精品一区二区三区久久久 | 久久精品国产亚洲αv忘忧草| 国产福利电影一区二区三区久久老子无码午夜伦不 | 色综合久久久久| 色综合久久中文色婷婷| 国产精品亚洲综合专区片高清久久久 | 香蕉久久一区二区不卡无毒影院 | 亚州日韩精品专区久久久|