admin 发表于 2022-7-11 12:39:12

bcd码和进制相互转换

// 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 longBCDtoDec(const unsigned char *bcd, int length)
{
   int i, tmp;
   unsigned long dec = 0;

   for(i=0; i<length; i++)
   {
      tmp = ((bcd>>4)&0x0F)*10 + (bcd&0x0F);   
      dec += tmp * power(100, i);         
   }
   return dec;
}

//
// 功能:十进制转 BCD 码
//
// 输入: int Dec                      待转换的十进制数据
//      int length                   BCD 码数据长度
//
// 输出: unsigned char *Bcd         转换后的 BCD 码
//
// 返回: 0success
//
// 思路:原理同 BCD 码转十进制
//
//
int DectoBCD(int Dec, unsigned char *Bcd, int length)
{
   int i;
   int temp;

   for(i=0; i<length; i++)
   {
         temp = Dec%100;
         Bcd = ((temp/10)<<4) + ((temp%10) & 0x0F);
         Dec /= 100;
   }
   return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
        int t=137000000;
        int tmp;
        unsigned char string;
        memset(string,0,20);

        DectoBCD(t,string,5);
        tmp = BCDtoDec(string,5);
        while(1);
        return 0;
}

页: [1]
查看完整版本: bcd码和进制相互转换