• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            字節(jié)順序(big endian還是little endian?)

            對于字節(jié)順序(endianness)的概念,這里已經(jīng)說的很清楚。
            不過為了日后方便復(fù)習(xí),我再重復(fù)一下:

            一個(gè)w位的整數(shù),有位表示[X(w-1), X(w-2), ..., X1, X0],其中X(w-1)是最高有效位,X0是最低有效位。如果w8的倍數(shù),則這些位可以分組成字節(jié),其中最高有效字節(jié)包含位[X(w-1), X(w-2), ..., X(w-8)],最低有效字節(jié)包含位[X7, X6, ..., X1, X0]
            如果一種機(jī)器在存儲器中按照從最高有效字節(jié)到最低有效字節(jié)的順序存儲,這種方式就叫做小端法(little endian); 另一些機(jī)器在存儲器中則是按照從最低有效字節(jié)到最高有效字節(jié)的順序存儲,這種方式被稱為大端法(big endian)。


            那么,如何通過代碼來判斷機(jī)器的字節(jié)順序呢?

            網(wǎng)上搜索了一下,比較流行的方案是利用union的共用內(nèi)存的特性來實(shí)現(xiàn),有代碼如下:

                union
                {
                   
            int a;
                   
            int b;
                }endian;

                endian.a = 1;
                printf(endian.b == 1 ? "little endian" : "big endian");



            不過個(gè)人感覺使用union不夠直觀和簡潔,所以自己另外寫了一個(gè):

                short   endian = 0x00FF;
                printf(*(
            char*)&endian ? "little endian" : "big endian");


            首先單個(gè)字節(jié)不存在endian的問題,所以用一個(gè)2個(gè)字節(jié)(intel-x86-32)short來模擬字節(jié)序列,上面代碼中endian賦值后最高有效字節(jié)的二進(jìn)制位全為0,而最低有效字節(jié)全為1。如果是在big endian的機(jī)器上,endian在內(nèi)存中應(yīng)該是這樣存放的:

            00000000 11111111

            而在littel endian機(jī)器上又該是這樣存放的:

            11111111 00000000

            如你所知,存儲器按字節(jié)編址,(char*)&endian這行代碼告訴編譯器把endian當(dāng)成字節(jié)序列來看待而不是short,這樣(char*)&endian返回的結(jié)果就會是endian的最低有效字節(jié)的地址。這樣,我們通過判斷這個(gè)地址保存的值是否非0就可以知道機(jī)器的字節(jié)順序。

            posted on 2009-08-17 10:13 肥仔 閱讀(639) 評論(1)  編輯 收藏 引用 所屬分類: C++ 基礎(chǔ)

            評論

            # re: 字節(jié)順序(big endian還是little endian?)  回復(fù)  更多評論   

            寒!樓主不厚道……
            摘錄我的也不說一聲,更讓人噴飯的是連出處也不注明。
            2009-10-09 15:27 | Rye
            国产精品青草久久久久福利99 | 久久久久久毛片免费看| 久久婷婷五月综合97色一本一本| 久久亚洲2019中文字幕| 精品国产青草久久久久福利| 国产成年无码久久久久毛片| 亚洲va久久久噜噜噜久久狠狠| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久精品视屏| 欧美亚洲另类久久综合婷婷 | 久久99精品国产| 国产精品久久国产精麻豆99网站| 久久久精品2019免费观看| 久久综合国产乱子伦精品免费| 日韩人妻无码一区二区三区久久| 97精品伊人久久久大香线蕉| 久久水蜜桃亚洲av无码精品麻豆 | 69SEX久久精品国产麻豆| 国内精品久久国产大陆| 久久996热精品xxxx| 色综合久久天天综线观看| 蜜桃麻豆WWW久久囤产精品| 色妞色综合久久夜夜| 久久久久AV综合网成人| 国产ww久久久久久久久久| 亚洲国产天堂久久久久久| 精品久久人人爽天天玩人人妻| 精品久久久久久久无码 | 久久久噜噜噜久久熟女AA片| 69国产成人综合久久精品| 久久综合狠狠综合久久97色| 性色欲网站人妻丰满中文久久不卡| 久久久久成人精品无码中文字幕| 中文字幕亚洲综合久久2| 久久精品亚洲AV久久久无码| 国产亚洲婷婷香蕉久久精品| 九九精品久久久久久噜噜| 精品久久久久久中文字幕| 久久人妻无码中文字幕| 国产精品成人久久久久久久| 老色鬼久久亚洲AV综合|