十六进制转ASCII码

记录一下自己在做项目的时候遇到的问题:
芯片传回来的数据是以十六进制表示的,但是我想要把这十六进制代表的数据通过UART发送到电脑上表示出来,所以最终要求就是将十六进制表示的数据用ASCII码表示传给电脑。
但是所用的单片机又调不出sprintf函数…
后面发现从HEX到ASCII很难直接实现,所以便想到:HEX—>BCD,BCD—>ASCII

//==========================HEX转BCD码=================================
unsigned int HEX2BCD(unsigned char hex_data)
{
    unsigned int bcd_data;
    unsigned char temp;
    temp=hex_data%100;
    bcd_data=((unsigned int)hex_data)/100<<8;
    bcd_data=bcd_data|temp/10<<4;
    bcd_data=bcd_data|temp%10;
    return bcd_data;
}
//==========================BCD转ASCII码==============================
const unsigned char bcd2ascii[10]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
void BCD2ASCII(unsigned char *BCD_data,unsigned char *ASCII_data)
{
    while(*BCD_data)
    {
        unsigned char temp=*BCD_data++;
        unsigned char c;
        c=temp>>4;//取高4位BCD码
        *ASCII_data++=bcd2ascii[c];//先赋值,指针再自增
        c=temp&0x0f;//取低4位BCD码
        *ASCII_data++=bcd2ascii[c];
        //*ASCII_data++=' ';         //每次读完发送一个,号
    }
    //*ASCII_data++='\r';
    //*ASCII_data='\n';              //发送完一次数据打入一个回车符
}

要注意的是在进行这样的类似字符串操作时:
1.指针初始化指向的是一个字符串的首地址!指针指向的变量也要有一定的范围
2.字符串与字符数组的区别在于字符串最后一位为’\0’,用指针循环while(*p)时判断标志位就为’\0’!字符串赋初值时编译器会给字符串后添加’\0’

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值