C语言关键字union在单片机设计的妙用
【摘要】
原文首发地址:C语言关键字union在单片机设计的妙用 - 知乎
union与struct用法非常类似,不过其适用于不同时被用到的数据
1. 大小端模式对 union 类型数据的影响(51是大端,一般处理器都是小端)
union{int i;char a[2];}*p, u;p = &u;p->a[0] = 0x...
原文首发地址:C语言关键字union在单片机设计的妙用 - 知乎
union与struct用法非常类似,不过其适用于不同时被用到的数据
1. 大小端模式对 union 类型数据的影响(51是大端,一般处理器都是小端)
-
union
-
{
-
int i;
-
char a[2];
-
}*p, u;
-
p = &u;
-
p->a[0] = 0x39;
-
p->a[1] = 0x38;
-
p.i 的值应该为多少呢?
-
这里需要考虑存储模式:大端模式和小端模式。
-
-
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
-
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中
-
-
union 型数据所占的空间等于其最大的成员所占的空间。
-
对 union 型的成员的存取都是 相对于该联合体基地址的偏移量为 0 处开始,
-
也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。
-
-
/*
-
所以要是
-
小端输出:
-
大端输出:
-
*/
2. 如何用程序确认当前系统的存储模式?
-
Union check
-
{
-
int i;
-
char ch;
-
} c;
-
c.i = 1;
-
printf("%d",c.ch);
-
-
如果存储为大端模式,则输出为0,如果为小端模式,则输出1。
文章来源: allen5g.blog.csdn.net,作者:CodeAllen2022,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/125075437
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)