C语言问题

[复制链接]
2021|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 | 显示全部楼层
  1. 如果没理解错,可以这么做【使用强制类型转换】:
  2. unsigned long int Data;
  3. *(unsigned char *)(&Data) = Data3;
  4. *((unsigned char *)(&Data) + 1) = Data2;
  5. *((unsigned char *)(&Data) + 2) = Data1;
  6. *((unsigned char *)(&Data) + 3) = Data0;
airwill 发表于 2012-6-7 12:04 | 显示全部楼层
用一个 union 什么操作都不需要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部