久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

ARM中的big-endian和little-endian

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

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

本文引用地址:http://cqxgywz.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;
}



評論


技術專區

關閉