威望0
积分7986
贡献0
在线时间764 小时
UID1
注册时间2021-4-14
最后登录2024-11-25
管理员
- UID
- 1
- 威望
- 0
- 积分
- 7986
- 贡献
- 0
- 注册时间
- 2021-4-14
- 最后登录
- 2024-11-25
- 在线时间
- 764 小时
|
// dectobcd.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <math.h>
// 功能:求权
//
// 输入: 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, 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=0; i<length; i++)
{
temp = Dec%100;
Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F);
Dec /= 100;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int t=137000000;
int tmp;
unsigned char string[20];
memset(string,0,20);
DectoBCD(t,string,5);
tmp = BCDtoDec(string,5);
while(1);
return 0;
}
|
|