进制转换小函数实现,十进制转16进制,char转bcd码等

这篇博客详细介绍了使用C语言实现不同进制间的转换函数,包括从十进制到16进制,字符到BCD码的转换,以及ASCII码与二进制之间的相互转换。通过具体函数如`bcd2bin()`、`bin2bcd()`、`ascii2bcd()`等,展示了如何在实际编程中处理这些常见的进制转换问题。

#include <stdint.h>
#include "convert.h"

unsigned bcd2bin(unsigned char val)//11 : 0x11
{
    return (val & 0x0f) + (val >> 4) * 10;
}

unsigned char bin2bcd(unsigned char val)//0x11 :11/10*16+1 = 17
{
    if(val==0)
        return 0;
    else
        return ((val / 10) *16) + val % 10;
}

uint8_t ascii2bcd(uint8_t *str)
{
    return (((*str - '0')<<4)+(*(str+1) - '0'));
}
/*
*举例:0x31,转换后返回1;
*/
uint8_t numAsscci2bin(uint8_t a){//
    if(a >= 0x30 && a <= 0x39)
        return (uint8_t)(a - '0');
    else if(a >= 0x41 && a<= 0x46)
        return (a - 0x37);//这里应该减去0x37,否则算出来
    else if(a >= 0x61 && a<= 0x66)
        return (a - 0x57);
    else
        return ascii2bin(&a);
}
void bcd2ascii(uint8_t bcd,uint8_t *ascii)
{
    *ascii = (bcd >> 4) + '0';
    *(ascii+1)=(bcd & 0x0f)+'0';
}

uint8_t char2int(uint8_t ch)
{
    if(ch > '9')
        return (ch-'a' + 0x0a);
    else
        return (ch-'0');
}

uint8_t ascii2bin(uint8_t *str)
{
    uint8_t ret;

    *str=tolower(*str);
    ret=char2int(*str);
    str++;
    ret<<=4;
    *str=tolower(*str);
    ret+=char2int(*str);
    return ret;
}

void bin2ascii(uint8_t bin,uint8_t *ascii)
{
    uint8_t hVal,lVal;

    hVal = bin >> 4;
    lVal = bin & 0x0F;
    if(hVal > 9){
        *ascii = hVal + 0x37;
    }else{
        *ascii = hVal + '0';
    }
    if(lVal > 9){
        *(ascii+1)=lVal + 0x37;
    }else{
        *(ascii+1)=lVal + '0';
    }
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值