不定长的HEX转换为BCD

本文介绍了一个C语言函数,用于将十六进制数据转换为八进制(BCD)表示法。HexToBcd函数接受一个十六进制数组和长度,然后将每个十六进制值转换为对应的BCD形式并存储在另一个数组中。示例展示了如何在main函数中使用这个转换功能。
摘要由CSDN通过智能技术生成
hex转bcd
typedef unsigned char  uint_8;
typedef unsigned short int uint_16;
#define hydrology_8  uint_8
#define hydrology_16  uint_16

/**


/**
 * @brief 将HEX转化为BCD
 * 
 * @param bcd 
 * @param hex 
 * @param hex_len 
 * @return hydrology_8  
 */
hydrology_8 HexToBcd(hydrology_8 bcd[],hydrology_8 hex[],hydrology_8 hex_len)
{
    hydrology_8 len=0;
    double fNum = 0;  //以浮点数存储数,组合出来的的数值不能超过double 最大的数值
    char cNum[16];
    hydrology_8 cNumLen =0;
    hydrology_8 *pbcd = bcd;
    char  *pCNum = cNum;
    for (hydrology_8 i = 0; i < hex_len; i++)
    {
        fNum *=0x100;
        fNum +=hex[i];
    }
    sprintf(cNum,"%.0lf",fNum);
    cNumLen = strlen(cNum);
    len = cNumLen/2;
    if(cNumLen%2)
    {
        *pbcd = (cNum[0]-'0') & 0x0f; 
        pbcd++;
        cNumLen--;
        pCNum++;
        len ++;
    }
    while(cNumLen>0)
    {
        *pbcd = ((*pCNum)-'0')<<4 |((*(pCNum+1))-'0');
        pbcd +=1;
        pCNum +=2;
        cNumLen -=2;
    }
    return len;
        
}



int main()
{
    hydrology_8 buf[16];
    hydrology_8 buf_len=0;
    hydrology_8 hex[16]={0x98,0x12,0x34,0x19};
    buf_len= HexToBcd(buf,hex,4);
    for (int i = 0; i < buf_len; i++)
    {
        printf("%x\t",buf[i]);
    }
    system("pause");

}
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值