打印

C语言问题

[复制链接]
1567|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hopestek|  楼主 | 2012-6-6 08:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned long int Data;  32 Bit的数据
unsigned char Data3;     Data数据第24Bit~31Bit
unsigned char Data2;     Data数据第16Bit~23Bit
unsigned char Data1;     Data数据第8Bit~15Bit
unsigned char Data0;     Data数据第0Bit~7Bit
意思就是Data:[Data3+Data2+Data1+Data0]

C语言如何用一个无符号的长整形来代替这四个无符号字符型?
我现在是把32位的Data数据进行移位后,直接就可以得到这四个8位的字符型数据
还是一定要把32位数据处理好后,要每移8位给8位再给无符号型数据?
我用的MCU是STM8S103D3T6C,用C写的程序。如果可以嵌入汇编也可以,但汇编该如何找到对应该的Data3\Data2\Data1\Data0这四个内存单元呢
如果有相关的资料更好,谢谢各位

还有个问题,如何散分呀?刚来21ic,请各位指教
沙发
forgot| | 2012-6-6 09:28 | 只看该作者
点上面的我要结贴就可以一个一个的给分了

使用特权

评论回复
板凳
IJK| | 2012-6-6 10:34 | 只看该作者
STM8是big endian的。所以 Data:[Data3+Data2+Data1+Data0] 是成立的。

不是很明白问题:
C语言如何用一个无符号的长整形来代替这四个无符号字符型?

如果没理解错,可以这么做【使用强制类型转换】:
unsigned long int Data;
*(unsigned char *)(&Data) = Data3;
*((unsigned char *)(&Data) + 1) = Data2;
*((unsigned char *)(&Data) + 2) = Data1;
*((unsigned char *)(&Data) + 3) = Data0;

使用特权

评论回复
地板
zhaofy521| | 2012-6-6 13:25 | 只看该作者
如果没理解错,可以这么做【使用强制类型转换】:
unsigned long int Data;
*(unsigned char *)(&Data) = Data3;
*((unsigned char *)(&Data) + 1) = Data2;
*((unsigned char *)(&Data) + 2) = Data1;
*((unsigned char *)(&Data) + 3) = Data0;

使用特权

评论回复
5
airwill| | 2012-6-7 12:04 | 只看该作者
用一个 union 什么操作都不需要

使用特权

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

本版积分规则

0

主题

1

帖子

0

粉丝