查看: 1496|回复: 1

[其他] 每天一个问题35天8问 :2字节整数转换成ASCII

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
    发表于 2015-9-28 23:59:47 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2015-9-29 10:03 编辑



    一、问题描述:
    在上位机计算机与微控制器通信时,经常要传输数据,有很多采用了ASCII码传输,那如果2字节的整数,就需要转换成对应的ASCII码发送,计算机发送过来的ASCII码数据又要转成2字节整数,如何实现呢?

    二、解决办法:
    1、经分析,2字节整数共有4个16进制数据,因此要用4字节来存放。
    2、而反过来,需要将4字节的ASCII码转成16进制数据存放。
    3、二进制数与16进制数据之间转换程序之前已经说明。
    4、对应程序我写出来也调试通过了,给大家分享一下:
    (1)将一个2字节整数转成4个字节ASCII
    uint8_t OneWord2FourAscii(uint16_t oneWord, uint8_t * fourAscii)
    {
            uint8_t result = 0;
            uint8_t aAscii;
            uint8_t fourAsciiTemp[4];
            aAscii = Hex2Ascii(oneWord >> 12);
            if (aAscii == 0xFF)
            {
                    return result;
            }
            *fourAsciiTemp = aAscii;
            aAscii = Hex2Ascii((oneWord >> 8) & 0x0F);
            if (aAscii == 0xFF)
            {
                    return result;
            }
            *(fourAsciiTemp + 1) = aAscii;
            aAscii = Hex2Ascii((oneWord >> 4) & 0x0F);
            if (aAscii == 0xFF)
            {
                    return result;
            }
            *(fourAsciiTemp + 2) = aAscii;
            aAscii = Hex2Ascii(oneWord & 0x0F);
            if (aAscii == 0xFF)
            {
                    return result;
            }
            *(fourAsciiTemp + 3) = aAscii;
            *fourAscii = *fourAsciiTemp;
            *(fourAscii + 1) = *(fourAsciiTemp + 1);
            *(fourAscii + 2) = *(fourAsciiTemp + 2);
            *(fourAscii + 3) = *(fourAsciiTemp + 3);
            result = 1;
            return result;
    }
    (2)将4个字节ASCII转成一个2字节整数
    uint8_t FourAscii2OneWord(uint8_t * fourAscii, uint16_t * oneWord)
    {
            uint8_t result = 0;
            uint8_t aHex;
            uint16_t oneWordTemp;
            aHex = Ascii2Hex(*fourAscii);
            if(aHex == 0xFF)
            {
                    return result;
            }
            oneWordTemp = ((uint16_t)aHex) << 12;
            aHex = Ascii2Hex(*(fourAscii + 1));
            if(aHex == 0xFF)
            {
                    return result;
            }
            oneWordTemp |= ((uint16_t)aHex) << 8;
            aHex = Ascii2Hex(*(fourAscii + 2));
            if(aHex == 0xFF)
            {
                    return result;
            }
            oneWordTemp |= ((uint16_t)aHex) << 4;
            aHex = Ascii2Hex(*(fourAscii + 3));
            if(aHex == 0xFF)
            {
                    return result;
            }
            oneWordTemp |= aHex;

            *oneWord = oneWordTemp;
            result = 1;
            return result;
    }

    三、感想与收获:
    1、这个在一些微处理器与上位机通信会用到。

    我知道答案 目前已有1人回答
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-9-30 10:29:24 | 显示全部楼层
    学习了,谢谢分享
    freescaleic.org.png
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 05:25 , Processed in 0.087751 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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