打印

合泰C语言联合体的问题

[复制链接]
3914|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen3bing|  楼主 | 2010-4-14 09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我定义了一个联合体:
union xy
{uint y;
uchar x[2];
}ccb3;
然后赋值:ccb3.y=0x1234;
用ccb3.x[0],ccb3.x[1]分解开来显示
结果显示0034.
而直接给ccb3.x[0]和ccb3.x[1]赋值就可以正常显示。
请问高手,怎么回事?如何解决?
谢谢!

相关帖子

沙发
chen3bing|  楼主 | 2010-4-14 09:48 | 只看该作者
高手支招啊!

使用特权

评论回复
板凳
winhi| | 2010-4-15 14:38 | 只看该作者
结果是用何语句显示的?
还是直接查看变量?

使用特权

评论回复
地板
xsgy123| | 2010-4-15 20:41 | 只看该作者
直接查看变量

使用特权

评论回复
5
zwll| | 2010-4-15 21:12 | 只看该作者
看不懂……

使用特权

评论回复
6
chen3bing|  楼主 | 2010-4-16 10:17 | 只看该作者
在另外一个论坛的高手说,如果编译器不是增强型的,int是作为字节型对待的。

使用特权

评论回复
7
sinadz| | 2010-4-18 21:13 | 只看该作者
LS意思不太懂

使用特权

评论回复
8
yybj| | 2010-4-19 21:33 | 只看该作者
也不是很懂

使用特权

评论回复
9
txcy| | 2010-4-19 22:06 | 只看该作者
int的类型还和编译器有关系?

使用特权

评论回复
10
linjing| | 2010-4-19 22:23 | 只看该作者
嵌入式的系统里尽量还是少用联合体,会吃大亏的!俺就吃过这亏,程序出问题了没地找去

建议看看有关MISRA方面的资料

使用特权

评论回复
11
linjing| | 2010-4-19 22:30 | 只看该作者
int 类型确实是和编译器有关滴!

不过确实没听说过有8位的int,比如51的Keil int是16位, ARM一般是32位的,如果是64位的系统,也很有可能是64位的

具体可以用sizeof(int)测试一下,或者查编译器的手册

使用特权

评论回复
12
djyos| | 2010-4-19 22:40 | 只看该作者
你用得是纯16位或者32位cpu,这种cpu中char是16位或者32位的,int也是。
但在取char型数据时,编译器会产生代码清除掉高8位(24位)。
可以去我的主页下载我的书,第16章有说明的。

使用特权

评论回复
13
winhi| | 2010-4-20 11:10 | 只看该作者
HOLTEK 的C编译器确实存在不同版本间的问题,7.0以前的版本,整型数为单字节的,8位。7.0以后的整型应该是16位的

使用特权

评论回复
14
dfsa| | 2010-4-20 20:31 | 只看该作者
哦,还会有这样的问题,以前确实不知道

使用特权

评论回复
15
pkat| | 2010-4-20 21:07 | 只看该作者
确实和编译器有关,也遇到过

使用特权

评论回复
16
gxgclg| | 2010-4-22 21:27 | 只看该作者
那怎么解决

使用特权

评论回复
17
chen3bing|  楼主 | 2010-4-23 07:50 | 只看该作者
定义成长整型的唠。

使用特权

评论回复
18
xsgy123| | 2010-4-23 20:24 | 只看该作者
嵌入式系统少用联合体,为何?

使用特权

评论回复
19
hsbjb| | 2010-4-23 20:52 | 只看该作者
我对楼主要表达的意思读的不是很懂,读了一遍,迷糊

使用特权

评论回复
20
sinadz| | 2010-4-23 21:40 | 只看该作者
联合体有个好处就是节省RAM,为什么ARM不能用这种结构呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2540

帖子

2

粉丝