查看: 2133|回复: 4

[其他] 每天解决一个问题2:32位16位转成8位数据

[复制链接]
  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-8-26 20:51:59 | 显示全部楼层 |阅读模式
    本帖最后由 jinyi7016 于 2015-8-26 21:44 编辑

    问题
    有一些特殊的时候要用到8位的数据,但平时运算、处理、存储时都是用的32位,甚至64位的,但需要8位数据 的时候 ,一般的要把16位数转为两个8位的时候都是用移位来做-->(之前我也是这么做,但有时不小心“>> ”就写成了“>”,或移位移的不对,到最后找问题的时候很不好找。)
    1. 16位 a;
    2. 8位 bL,bH;
    3. bL=(8位)a;
    4. bH=(8位)(a>>8);
    复制代码
    移位操作虽然效率比较高但看着不明了,所以我现在用的方法是用共同体。
    1. union temp16{
    2.     16位 a;
    3.     8位 bL,bH;
    4. };
    复制代码
    例如:
    1. temp16.a=0x55aa;
    2. //则有(注意大小端)
    3. temp16.bL=0xaa;
    4. temp16.bH=0x55;
    复制代码
    用这种方法,程序的可读性增加不少。
    对于没有8位数据类型的架构(即char型也是16位的,如TI的DSP)
    可以这样-->
    1. union temp16{
    2.     16位 a;
    3.     8位 bL:8;
    4.     8位 bH:8;
    5. };
    复制代码
    有些芯片的架构不同可能有所区别,但大同小异。
    注:以上代码没有严格按特定的语法,因为同一语句在不同的IDE下可以会不错,只做原理讲解。
    延伸
    这只是用到了共同体,还可以把结构体与共同体结合使用,使数据的操作更简洁。
    最后的最后
    七夕活动还请大家支持,投上您尊贵的一票!
    地址:七夕投票
    本人第三个,感谢感谢。
    捕4获.PNG

    我知道答案 目前已有4人回答

    评分

    参与人数 1NXP金币 +10 收起 理由
    小七 + 10 打赏!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2015-8-26 21:01:22 | 显示全部楼层
    o(∩_∩)o 哈哈,最后一个是重点啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16853
    最后登录
    1970-1-1
    发表于 2015-8-26 21:12:11 | 显示全部楼层
    多谢分享
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
     楼主| 发表于 2015-8-26 21:46:00 | 显示全部楼层
    ALTIUM2 发表于 2015-8-26 21:01
    o(∩_∩)o 哈哈,最后一个是重点啊

    哈哈,被你发现了~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-8-27 16:33:50 | 显示全部楼层
    谢谢楼主分享,不错的方法。
    freescaleic.org.png
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-2 04:08 , Processed in 0.095978 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表