#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';
}
}

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

被折叠的 条评论
为什么被折叠?



