回 帖 发 新 帖 刷新版面

主题:求INT转BCD和BCD转INT的函数

在做通讯的时候,有字段类型指定是BCD的,我该如何转换,字付串比如:“12345”,我可以转换成01 23 45 这样占三个字节是对的么?
但是整型呢,我该如何转,比如有个长度123,规定类型是BCD的,我该如何转?还是只能把123当成字符串的"123"来转?请赐都。。
如果有INT转BCD和BCD转INT的函数,请贴出来让我提高一下,万分感谢。

回复列表 (共13个回复)

沙发

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

unsigned long  BCDToDec(const unsigned char *bcd, int length) 

    int tmp; 
    unsigned long dec = 0; 
    
    for(int i = 0; i < length; i++) 
    { 
        tmp = ((bcd[i] >> 4) & 0x0F) * 10 + (bcd[i] & 0x0F);    
        dec += tmp * pow(100, length - 1 - i);           
    } 
    
    return dec; 


int DecToBCD(int Dec, unsigned char *Bcd, int length) 

    int tmp; 
    
    for(int i = length - 1; i >= 0; i--) 
    { 
        tmp = Dec % 100; 
        Bcd[i] = ((tmp / 10) << 4) + ((tmp % 10) & 0x0F); 
        Dec /= 100; 
    } 
    
    return 0; 


int main(int, char **, char **)
{
    //BCD码转十进制 
    typedef unsigned char byte;
    unsigned long dec_bcd = 0; 
    byte BCD[4] = {0x98, 0x23, 0x45, 0x78}; 
    byte tmp_buf[12] = ""; 
    
    dec_bcd = BCDToDec(BCD, 4); 
    printf("dec_bcd = %d\n", dec_bcd); 
    
    //十进制转BCD码 
    DecToBCD(dec_bcd, tmp_buf, 4); 
    for(int i = 0; i < 5; i++) 
    { 
        printf("tmp_bff[%d] = 0x%02X\n", i, tmp_buf[i]); 
    } 
        
    system("pause");
    return 0;
}

板凳

真的很不错啊!真的很不错啊!真的很不错啊!真的很不错啊!真的很不错啊!

3 楼

真的很不错啊!真的很不错啊!真的很不错啊!真的很不错啊!

4 楼

1234567898765432347876543234567876后来居上

5 楼

真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!

6 楼

真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!

7 楼

这里是什么地方啊!

8 楼

快来学习一下吧!快来学习一下吧!快来学习一下吧!快来学习一下吧!

9 楼

真的很不错啊!!!

10 楼

真的要好好学习一下!

我来回复

您尚未登录,请登录后再回复。点此登录或注册