龙空技术网

BCD和Binary之间的转换(附C语言实现)

兴电子 427

前言:

而今姐妹们对“二进制转化为十进制代码c语言代码”大概比较注重,大家都需要分析一些“二进制转化为十进制代码c语言代码”的相关文章。那么小编也在网上网罗了一些有关“二进制转化为十进制代码c语言代码””的相关内容,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。BCD码也称二进码十进数,BCD码可分为有权码和无权码两类。其中,常见的有权BCD码有8421码、2421码、5421码,无权BCD码有余3码、余3循环码、格雷码。

一般来说,默认的BCD码是8421码,也就是说,使用4位二进制数来表示10位0-9的1位十进制数。从左到右的重量是8,4,2,1。

以十进制37为例,进行转换:

3=2+1=(8421码)0011,7=4+2+1=(8421码)0111。

所以37转换成8421码为0011 0111,即0x37表示。

为了方便使用,本文提供了BCD和二进制之间相互转换的具体实现。函数的实现原理比较简单,对于第一个函数Bcd2ToByte,先对BCD数取其高四位,右移四位,再乘以10,作为十位数字;再取其第四位作为个位数字;两者作和,则为对应的二进制数转换结果。第二个ByteToBcd2,在循环中每减一个10,对bcdhigh加1,而变量bcdhigh 用以累计十位数值,减到不够10以后,那就剩个位了,直接或在bcdhigh 左移四位的后面就是对应BCD的转换结果。

直接可用程序如下:

#include <stdio.h>

typedef unsigned char uint8_t;

typedef unsigned int uint32_t;

// BCD转换为二进制

static uint8_t Bcd2ToByte(uint8_t Value)

{

uint32_t tmp = 0U;

tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10U;

return (tmp + (Value & (uint8_t)0x0F));

}

//二进制转换为BCD

static uint8_t ByteToBcd2(uint8_t Value)

{

uint32_t bcdhigh = 0U;

while (Value >= 10U)

{

bcdhigh++;

Value -= 10U;

}

return ((uint8_t)(bcdhigh << 4U) | Value);

}

int main()

{

uint8_t val = 0x19;

uint8_t val2 = 99;

printf("BCD: 0x%X --> Binary: %d \n", val, Bcd2ToByte(val));

printf("Binary: %d --> BCD: 0x%X \n", val2, ByteToBcd2(val2));

return 0;

}

运行结果:

标签: #二进制转化为十进制代码c语言代码 #c语言bcd码转换 #bcd码转10进制 #bcd转换为二进制数计算器 #c语言重量转换