BCD与ASCII码互转-C语言实现

最近由于项目需要,需要将BCD编码转换为对应的字符串,下面为C语言实现,经测试好用!

 转载请标明出处!
 https://blog.csdn.net/lhl_blog/article/details/39496255
/*BCD 与 ASCII码转换*/
 
/*******************************************************************
函数名:  asc2bcd 
功能描述:将ascii码转换为bcd码
参数:    
         bcd:转换后的BCD码
         asc:需转换的ASCII码串
         len:需转换的ascii码串长度
返回值:  uint32 
                              0:成功
                              其他:失败
********************************************************************/
uint32 asc2bcd(uint8* bcd, const uint8* asc, uint32 len);
 
/*******************************************************************
函数名: bcd2asc 
功能描述:将bcd码转换为ascii码串
参数:    
         asc:转换的ASCII码串
         bcd:需转换的BCD码
         len:需转换的BCD码长度
返回值:  uint32 
                              0:成功
                              其他:失败
********************************************************************/
uint32 bcd2asc(uint8* asc, const uint8* bcd, uint32 len);
#include <assert.h>
 
#include "utils.h"
//基于查表实现BCD与Ascii之间的转换
static uint8 bcd2ascii[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
static uint8 ascii2bcd1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
static uint8 ascii2bcd2[6]  = {0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};

ASC2BCD函数

uint32 ASC2BCD(uint8 *bcd, const uint8 *asc, uint32 len)
{
    uint8 c = 0;
    uint8 index = 0;
    uint8 i = 0;  
    
    len >>= 1;    
 
    for(; i < len; i++) {
        //first BCD
        if(*asc >= 'A' && *asc <= 'F') {
            index = *asc - 'A'; 
            c  = ascii2bcd2[index] << 4;
        } else if(*asc >= '0' && *asc <= '9') {
            index = *asc - '0';
            c  = ascii2bcd1[index] << 4;
        }
        asc++;
 
        //second BCD
        if(*asc >= 'A' && *asc <= 'F') {
            index = *asc - 'A'; 
            c  |= ascii2bcd2[index];
        } else if(*asc >= '0' && *asc <= '9') {
            index = *asc - '0';
            c  |= ascii2bcd1[index];
        }
        asc++;
 
        *bcd++ = c;
    }   
 
    return 0;
}

BCD2ASC 函数

uint32 BCD2ASC (uint8 *asc, const uint8 *bcd, uint32 len)
{
    uint8 c = 0;
    uint8 i;
 
 
    for(i = 0; i < len; i++) {
        //first BCD
        c = *bcd >> 4;
        *asc++ = bcd2ascii[c];
 
 
        //second
        c = *bcd & 0x0f;
        *asc++ = bcd2ascii[c];
        bcd++;
    }
 
 
    return 0;
}

main函数

int main(void)//测试程序
{
    const unsigned char ascii[12] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'};
    unsigned char bcd[6];
 
    ASC2BCD(bcd, ascii, 12, 0); 
    
    int i = 0;
 
    printf("ascii = %s\n", ascii);
 
    for(; i < 6; i++) {
        printf("bcd = 0x%.2x\n", bcd[i]);
    }   
 
    /*  
       unsigned char ascii[13] = {0};
       const unsigned char bcd[6] = {0x01, 0x23, 0x45, 0xCD, 0xEF, 0xAB};
       BCD2ASC(ascii, bcd, 6, 0);
       printf("ascii = %s\n", ascii);
       */
    return 0;
}

BCD码在线转换网站

https://www.23bei.com/tool/243.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值