新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM中的big-endian和little-endian

        ARM中的big-endian和little-endian

        作者: 時間:2016-11-20 來源:網絡 收藏
        ARM體系中,每個字單元包含4個字節單元或者兩個半字單元。在字單元中,4個字節哪一個是高位字節,哪一個是低位字節則有兩種不同的格式:big-endianlittle-endian格式。在小端模式中,低位字節放在低地址,高位字節放在高地址;在大端模式中,低位字節放在高地址,高位字節放在低地址。

        如果將一個32位的整數0x12345678存放到一個整型變量(int)中,這個整型變量采用大端或者小端模式在內存中的存儲由下表所示。

        本文引用地址:http://www.104case.com/article/201611/319009.htm

        地址偏移

        大端模式

        小端模式

        0x00

        12(OP0)

        78(OP3)

        0x01

        34(OP1)

        56(OP2)

        0x02

        56(OP2)

        34(OP1)

        0x03

        78(OP3)

        12(OP0)

        如果將一個16位的整數0x1234存放到一個短整型變量(short)中。這個短整型變量在內存中的存儲在大小端模式由下表所示。

        地址偏移

        大端模式

        小端模式

        0x00

        12(OP0)

        34(OP1)

        0x01

        34(OP1)

        12(OP0)

        由上表所知,采用大小模式對數據進行存放的主要區別在于在存放的字節順序,大端方式將高位存放在低地址,小端方式將低位存放在低地址。

        那么該如何判斷CPU是大端模式還是小端模式呢??

        在C語言中,聯合體union的存放順序是所有成員都從低地址開始存放的。利用這一特點,可以用聯合體變量判斷ARM或x86環境下,存儲系統是是大端還是小端模式。

        具體的代碼如下:

        #include "stdio.h"
        int main()
        {
        union w
        {
        int a; //4 bytes
        char b; //1 byte
        } c;
        c.a=1;
        if (c.b==1)
        printf("It is Little_endian!/n");
        else
        printf("It is Big_endian!/n");
        return 1;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 咸丰县| 丰台区| 德格县| 上林县| 敖汉旗| 湾仔区| 洪江市| 手游| 黔西县| 永和县| 南平市| 德江县| 体育| 晋江市| 鄱阳县| 梅州市| 明光市| 邹城市| 竹溪县| 庐江县| 依安县| 图们市| 长春市| 博客| 成都市| 当阳市| 泊头市| 年辖:市辖区| 万荣县| 惠东县| 大城县| 湘阴县| 延庆县| 平湖市| 南投市| 建湖县| 红安县| 洪雅县| 于田县| 汤原县| 图们市|