您的位置 首页 国产IC

ARM中的big-endian和little-endian

在ARM体系中,每个字单元包含4个字节单元或者两个半字单元。在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:b…

ARM系统中,每个字单元包括4个字节单元或许两个半字单元。在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格局:big-endianlittle-endian格局。在小端形式中,低位字节放在低地址,高位字节放在高地址;在大端形式中,低位字节放在高地址,高位字节放在低地址。

假如将一个32位的整数0x12345678寄存到一个整型变量(int)中,这个整型变量选用大端或许小端形式在内存中的存储由下表所示。

地址偏移

大端形式

小端形式

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;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/264542.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部