BCD和ASCII相互转化及BCD转int的函数

BCD和ASCII相互转化及BCD转int的函数,重新写的,感觉还不错。

可以根据自己的需要更改返回值。

/**********************stdfunc.h***********************/

#ifndef _STD_FUNC_H_
#define _STD_FUNC_H_

/*
参数
bcd: 转化后BCD结果
asc: 需转化ASC字符串
len: 需转化长度
fmt: 转化后的格式,即长度为奇数时,前补还是后补零
返回值
处理的BCD字节长度
*/
int ASC2BCD(unsigned char *bcd, const char *asc, int len, int fmt);

/*
参数
asc: 转化后ASC结果
bcd: 需转化BCD字符串
len: 需转化长度
fmt: 需转化BCD的格式,即长度为奇数时,前补还是后补零
返回值
处理的BCD字节长度
*/
int BCD2ASC(char *asc, const unsigned char *bcd, int len, int fmt);

/*
参数
plen: 转化后int结果指针
bcd: 需转化BCD字符串
len: 需转化长度
fmt: 需转化BCD的格式,即长度为奇数时,前补还是后补零
返回值
处理的BCD字节长度
*/
int BCD2INT(int *plen, const unsigned char *bcd, int len, int fmt);


#endif /* _STD_FUNC_H_ */

/**********************stdfunc.c***********************/

#include "stdfunc.h"


int ASC2BCD (unsigned char *bcd, const char *asc, int len, int fmt)
{
 int i, odd;
 char c;
 
 odd = len&0x01;
 
 if ( odd && !fmt)
  *bcd++ = (*asc++) & '/x0F';
 
 len >>= 1;

 for (i=0; i<len; i++) {
  c = (*asc++) << 4;
  c |= (*asc++) & '/x0F';
  
  *bcd++ = c;
 }
 
 if ( odd && fmt)
  *bcd = (*asc) << 4;

 return (i+odd);
}

int BCD2ASC (char *asc, const unsigned char *bcd, int len, int fmt)
{
 int i, odd;
 unsigned char c;
 
 odd = len&0x01;
 
 if ( odd && !fmt)
  *asc++ = ((*bcd++)&'/x0F') + '0';

 len >>= 1;

 for (i=0; i<len; i++) {
  c = *bcd++;
  *asc++ = (c>>4) + '0';
  *asc++ = (c&'/x0F') + '0';
 }
 
 if ( odd && fmt)
  *asc = ((*bcd)>>4) + '0';
 
 return (i+odd);
}

int BCD2INT(int *plen, const unsigned char *bcd, int len, int fmt)
{
 int l=0, i, odd;
 unsigned char c;
 
 odd = len&0x01;
 
 if ( odd && !fmt)
  l = (*bcd++)&'/x0F';

 len >>= 1;

 for (i=0; i<len; i++) {
  c = *bcd++;
  l *= 10;
  l += c>>4;
  l *= 10;
  l += c&'/x0F';
 }
 
 if ( odd && fmt)
 {
  l *= 10;
  l += (*bcd)>>4;
 }

 *plen = l;
 
 return (i+odd);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值