大小端及判定方式

39 篇文章 8 订阅
17 篇文章 0 订阅

大小端:
大端存储:低字节数据存放在高地址,高字节数据存放在低地址
小端存储:低字节数据存放在低地址,高字节数据存放在高地址

STM32F101xx和STM32F103xx仅支持小端模式,虽然Cortex-M3是大小都支持的。

判定方式

一、利用联合体

在union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。

联合体变量的各个成员都是从低字节开始公用的。即:所有的成员都是从低字节开始的

即上述的union虽然定义了两个成员,但其实这个union只占用了4个字节(32位机器中),往a成员赋值,然后读取b就相读取a成员的低位第一个字节的值。如果机器使用大端模式,则u.a=1那a的最高字节值为1;

如果机器使用小段模式,则u.a=1则a的最低位字节为1。上述可知b和a有相同的起始位,所以读取b如果等于1,则为小端模式,b为0则为大端模式

typedef union {
	int i;
	char c;
}my_union;
 
int checkSystem1(void)
{
	my_union u;
	u.i = 1;
	return (u.i == u.c);
}


二、强制类型转换

void port()
{
    int a = 1;
    int b = (char)a;
    if(1 == b)
        printf("小端\n");
    else
        printf("大端\n");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值