电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

bcd码改换成十进制程序

2017-08-03 14:46分类:电子技术 阅读:

 

在做嵌入式软件的方案中,常常会遇到十六进制、 BCD 码与十进制之间的改换,近期做 M1 卡的运用中,触及了很多的十六进制、 BCD 码与十进制之间的改换。笔者经过对 BCD 码、十六进制 权的了解,轻松的结束了他们之间的沟通。

#include <stdio.h>
#include <string.h>
/////////////////////////////////////////////////////
//
// 功用:二进制取反
//
// 输入: const unsigned char *src 二进制数据
// int length 待改换的二进制数据长度
//
// 输出: unsigned char *dst 取反后的二进制数据
//
// 回来: 0 success
//
//////////////////////////////////////////////////////
int convert(unsigned char *dst, const unsigned char *src, int length)
{
int i;
for(i=0; i<length; i++)
{
dst[i] = src[i]^0xFF;
}
return 0;
}
//////////////////////////////////////////////////////////
//
// 功用:十六进制转为十进制
//
// 输入: const unsigned char *hex 待改换的十六进制数据
// int length 十六进制数据长度
//
// 输出:
//
// 回来: int rslt 改换后的十进制数据
//
// 思路:十六进制每个字符位所标明的十进制数的方案是 0 ~255 ,进制为 256
// 左移 8 位 (<<8) 等价乘以 256
//
/////////////////////////////////////////////////////////
unsigned long HextoDec(const unsigned char *hex, int length)
{
int i;
unsigned long rslt = 0;
for(i=0; i<length; i++)
{
rslt += (unsigned long)(hex[i])<<(8*(length-1-i));

}
return rslt;
}
/////////////////////////////////////////////////////////
//
// 功用:十进制转十六进制
//
// 输入: int dec 待改换的十进制数据
// int length 改换后的十六进制数据长度
//
// 输出: unsigned char *hex 改换后的十六进制数据
//
// 回来: 0 success
//
// 思路:原理同十六进制转十进制
//////////////////////////////////////////////////////////
int DectoHex(int dec, unsigned char *hex, int length)
{
int i;
for(i=length-1; i>=0; i--)
{
hex[i] = (dec%256)&0xFF;
dec /= 256;
}
return 0;
}
/////////////////////////////////////////////////////////
//
// 功用:求权
//
// 输入: int base 进制基数
// int times 权级数
//
// 输出:
//
// 回来: unsigned long 其时数据位的权
//
//////////////////////////////////////////////////////////
unsigned long power(int base, int times)
{
int i;
unsigned long rslt = 1;
for(i=0; i<times; i++)
rslt *= base;
return rslt;
}
/////////////////////////////////////////////////////////
//
// 功用: BCD 转 10 进制
//
// 输入: const unsigned char *bcd 待改换的 BCD 码
// int length BCD 码数据长度
//
// 输出:
//
// 回来: unsigned long 其时数据位的权
//
// 思路:紧缩 BCD 码一个字符所标明的十进制数据方案为 0 ~ 99, 进制为 100
// 先求每个字符所标明的十进制值,然后乘以权
//////////////////////////////////////////////////////////
unsigned long BCDtoDec(const unsigned char *bcd, int length)
{
int i, tmp;
unsigned long dec = 0;
for(i=0; i<length; i++)
{
tmp = ((bcd[i]>>4)&0x0F)*10 + (bcd[i]&0x0F);
dec += tmp * power(100, length-1-i);
}
return dec;
}
/////////////////////////////////////////////////////////
//
// 功用:十进制转 BCD 码
//
// 输入: int Dec 待改换的十进制数据
// int length BCD 码数据长度
//
// 输出: unsigned char *Bcd 改换后的 BCD 码
//
// 回来: 0 success
//
// 思路:原理同 BCD 码转十进制
//
//////////////////////////////////////////////////////////
int DectoBCD(int Dec, unsigned char *Bcd, int length)
{
int i;
int temp;
for(i=length-1; i>=0; i--)
{
temp = Dec%100;
Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F);
Dec /= 100;
}
return 0;
}
//------------- 函数信息 ------------------------------------------
// 函 数 名 : BCDtoDec
// 函数描绘 : BCD 码改换成十进制码
// 进口参数 : temp: 转化的 BCD 码
// 返 回 : 转化后的十进制码
// 说 明 :
//
//---------------------------------------------------------------
uint8 BCDtoDec( uint8 temp )
{
return ( ( temp/16 )*10+temp%16) ;
}
//------------- 函数信息 ------------------------------------------
// 函 数 名 : DectoBCD
// 函数描绘 : 十 / 十六进制码改换成 BCD 码
// 进口参数 : temp: 转化的十进制码
// 返 回 : 转化后的 BCD 码
// 作 者 :
// 日 期 : 2006.11.24
// 说 明 :
//
//---------------------------------------------------------------
uint8 DectoBCD( uint8 temp )
{
return ( (temp/10)*16 + temp%10 ) ;
}

上一篇:8550三极管驱动蜂鸣器剖析

下一篇:不锈钢电阻器参数

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部