在线时间246 小时
UID395834
注册时间2012-10-19
NXP金币0
TA的每日心情 | 擦汗 2022-3-3 09:56 |
---|
签到天数: 4 天 连续签到: 1 天 [LV.2]偶尔看看I
金牌会员
 
- 积分
- 1527
- 最后登录
- 2023-6-12
|
本帖最后由 jinyi7016 于 2015-8-26 21:44 编辑
问题
有一些特殊的时候要用到8位的数据,但平时运算、处理、存储时都是用的32位,甚至64位的,但需要8位数据 的时候 ,一般的要把16位数转为两个8位的时候都是用移位来做-->(之前我也是这么做,但有时不小心“>> ”就写成了“>”,或移位移的不对,到最后找问题的时候很不好找。)
- 16位 a;
- 8位 bL,bH;
- bL=(8位)a;
- bH=(8位)(a>>8);
复制代码 移位操作虽然效率比较高但看着不明了,所以我现在用的方法是用共同体。
- union temp16{
- 16位 a;
- 8位 bL,bH;
- };
复制代码 例如:
- temp16.a=0x55aa;
- //则有(注意大小端)
- temp16.bL=0xaa;
- temp16.bH=0x55;
复制代码 用这种方法,程序的可读性增加不少。
对于没有8位数据类型的架构(即char型也是16位的,如TI的DSP)
可以这样-->
- union temp16{
- 16位 a;
- 8位 bL:8;
- 8位 bH:8;
- };
复制代码 有些芯片的架构不同可能有所区别,但大同小异。
注:以上代码没有严格按特定的语法,因为同一语句在不同的IDE下可以会不错,只做原理讲解。
延伸
这只是用到了共同体,还可以把结构体与共同体结合使用,使数据的操作更简洁。
最后的最后
七夕活动还请大家支持,投上您尊贵的一票!
地址:七夕投票
本人第三个,感谢感谢。
|
评分
-
查看全部评分
|