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

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            字節序(Endian),大端(Big-Endian),小端(Little-Endian)

            在各種計算機體系結構中,對于字節、字等的存儲機制有所不同,因而引發了計算機通信領域中一個很重要的問題,即通信雙方交流的信息單元(比特、字節、字、雙字等等)應該以什么樣的順序進行傳送。如果不達成一致的規則,通信雙方將無法進行正確的編/譯碼從而導致通信失敗。目前在各種體系的計算機中通常采用的字節存儲機制主要有兩種:

            big-edianlittle-endian

             

             

            字節順序 Endian

            現代的計算機系統一般采用字節(Octet, 8 bit Byte)作為邏輯尋址單位。當物理單位的長度大于1個字節時,就要區分字節順序(Byte Order, or Endianness)。常見的字節順序有兩種:Big Endian(High-byte first)Little Endian(Low-byte first),這就是表2.1中的BELEIntel X86平臺采用Little Endian,而PowerPC處理器則采用了Big Endian。舉例來說,整型數字$1234ABCD存儲的時候就會有兩種方式:

            字節順序

            內存數據

            備注

            Big Endian (BE)

            0xAB 0xCD 0x12 0x34

            此時的0xAB被稱為most significant byte (MSB)

            Little Endian (LE)

            0xCD 0xAB 0x34 0x12

            此時的0xCD被稱為least significant byte (LSB)

             

            詞源:據Jargon File記載,endian這個詞來源于Jonathan Swift1726年寫的諷刺小說 "Gulliver's Travels"(《格利佛游記》)。該小說在描述Gulliver暢游小人國時碰到了如下的一個場景。在小人國里的小人因為非常小(身高6英寸)所以總是碰到一些意想不到的問題。有一次因為對水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開的爭論而引發了一場戰爭,并形成了兩支截然對立的隊伍:支持從Big-End剝開的人Swift就稱作Big-Endians而支持從Little-End剝開的人就稱作Little-Endians……(后綴ian表明的就是支持某種觀點的人:-)。Endian這個詞由此而來。

              1980年,Danny Cohen在其著名的論文"On Holy Wars and a Plea for Peace"中為了平息一場關于在消息中字節該以什么樣的順序進行傳送的爭論而引用了該詞。該文中,Cohen非常形象貼切地把支持從一個消息序列的MSB開始傳送的那伙人叫做Big-Endians,支持從LSB開始傳送的相對應地叫做Little-Endians。此后Endian這個詞便隨著這篇論文而被廣為采用。

            Mapping registers to memory locations

             

             

            最高有效位 MSB: Most Significant Bit

                   最高有效位(MSB),有時候叫做最左邊的位,是在一個n位二進制數字中的n-1位,這個位有最高的權重(2^(n-1))。第一個或最左邊的位,當這個數字被用一般的方式書寫時。

             

             

            最低有效位 LSB: Least Significant Bit

                   最低有效位(LSB)是給這些單元值的一個二進制整數位位置,就是,決定是否這個數字是偶數或奇數。LSB有時候是指最右邊的位,因為寫較不重要的數字到右邊位置符號的協定。它類似于一個十進制整數的最不重要的數字,它是在一個(最右邊)位置的數字。

             

             

            大端Big-Endian

            低地址存放最高有效位(MSB),既高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。

            計算機體系結構中一種描述多字節存儲順序的術語,在這種機制中最高有效位(MSB)存放在最低端的地址上。采用這種機制的處理器有IBM3700系列、PDP-10Mortolora微處理器系列和絕大多數的RISC處理器。

             

             

            小端Little-Endian

                   低地址存放最低有效位(LSB),既低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。

            計算機體系結構中一種描述多字節存儲順序的術語,在這種機制中最不重要字節(LSB)存放在最低端的地址上。采用這種機制的處理器有PDP-11VAXIntel系列微處理器和一些網絡通信設備。該術語除了描述多字節存儲順序外還常常用來描述一個字節中各個比特的排放次序。

             

             

            中端 Middle-Endian

            除了big-endianlittle-endian之外的多字節存儲順序就是middle-endian,比如以4個字節為例:象以3-4-1-2或者2-1-4-3這樣的順序存儲的就是middle-endian。這種存儲順序偶爾會在一些小型機體系中的十進制數的壓縮格式中出現。

             

             

            網絡字節序 Network Order

            TCP/IP各層協議將字節序定義為Big-Endian,因此TCP/IP協議中使用的字節序通常稱之為網絡字節序。

             

             

            主機序 Host Orader

            它遵循Little-Endian規則。所以當兩臺主機之間要通過TCP/IP協議進行通信的時候就需要調用相應的函數進行主機序(Little-Endian)和網絡序(Big-Endian)的轉換。

             

             

            C++怎樣判別大端小端

            使用宏的方法:

            const int endian = 1;

            #define is_bigendian() ( (*(char*) &endian) == 0 )

            #define is_littlendbian() ( (*(char*) &endian) == 1 )

             方法二:

            bool    IsLittleEndian()

            {

            union   

            {    

            long    val;

            char    Char[sizeof(long)];

            }
            u;

            //    1-小端(Intel);    0-大端(Motor)

            u.val 
            = 1;  

            if ( u.Char[0== 1 )

            {

            // 小端

            return true;

            }
              

            else if ( u.Char[sizeof(long)-1== 1 )

            {

            // 大端

            return false;  

            }
             

            throw"Unknown!" );

            }


             

             

            小知識

                Java使用的是Big-Endian

             

             

            引用

            1.       關于Endian大小端模式:
            http://hi.baidu.com/%C8%FD%C9%EE/blog/item/6abb3d7779c0961db151b96b.html

            2.       Endianness
            http://en.wikipedia.org/wiki/Endianness

            posted on 2009-01-06 03:44 楊粼波 閱讀(24866) 評論(8)  編輯 收藏 引用

            評論

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian) 2009-01-21 20:13 guest

            還是使用大尾、小尾更符合習慣。

            那段程序可以修改成這樣:
            int checkCPU()
            {
            union w
            {
            int a;
            char b;
            } c;

            c.a = 1;
            return (c.b == 1);
            }
              回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian) 2013-03-10 18:00 貌似有問題

            貌似有問題,這篇文章前后不一致  回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian)[未登錄] 2013-03-16 12:51 楊粼波

            @貌似有問題
            啥地方不對?  回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian) 2013-04-08 16:42 朝霧

            0x1234abcd的大端表示應該是:12 34 ab cd,地址是從左到右增大的;  回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian) 2013-04-11 21:21 liaoy747

            @朝霧
            0x1234abcd的大端表示應該是:12 34 ab cd, 這是在32位cpu上的情況。
            如果是16bit的cpu,則應該是:ab cd 12 34  回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian) 2013-11-01 16:07 內褲經常換

            樓豬的第一張圖,簡直是誤導不懂的人!!
            真是不好!
              回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian) 2014-12-30 16:04 潘世民

            謝謝博主幫我分清大端和小端的區別  回復  更多評論   

            # re: 字節序(Endian),大端(Big-Endian),小端(Little-Endian)[未登錄] 2015-12-14 13:12 小馬

            求教:為什么對字符串$1234ABCD 的Big Endian (BE)存儲序列是 0xAB 0xCD 0x12 0x34 (MSB)而不是 0x12 0x34 0xAB 0xCD ? 前后兩個字的順序需要顛倒?那如果字符串是$ 0x12 0x34 0xAB 0xCD 0xEF,采用BigEndian方法的存儲序列又該是什么?

              回復  更多評論   

            2020最新久久久视精品爱| 亚洲国产精品无码久久久蜜芽| 久久99热精品| 99久久免费只有精品国产| 亚洲精品美女久久久久99小说| 综合久久国产九一剧情麻豆| 久久精品成人国产午夜| 亚洲欧美日韩精品久久亚洲区 | 精品久久777| 久久亚洲精品无码播放| 97久久国产露脸精品国产| 久久99精品久久久久久齐齐| 亚洲色欲久久久综合网| 久久综合九色综合久99| 一级做a爰片久久毛片人呢| 久久人妻AV中文字幕| 久久亚洲中文字幕精品一区| jizzjizz国产精品久久| 伊人久久大香线蕉AV色婷婷色| 国产成人精品久久综合| 97r久久精品国产99国产精| 人人妻久久人人澡人人爽人人精品| 精品久久久久久国产91| 久久精品国产亚洲AV无码麻豆| 亚洲精品tv久久久久| 久久久久久噜噜精品免费直播| 久久福利青草精品资源站免费| 中文字幕乱码久久午夜| 7777精品伊人久久久大香线蕉| 国内精品久久久久久久久| 久久精品国产亚洲综合色| …久久精品99久久香蕉国产| 午夜不卡久久精品无码免费| 一本久久知道综合久久| 亚洲国产精品无码久久一区二区 | 97久久久久人妻精品专区 | 久久人人爽人人爽人人片AV高清| 久久国产视频99电影| 欧美成a人片免费看久久| 欧美与黑人午夜性猛交久久久 | 麻豆亚洲AV永久无码精品久久|