快捷搜索:  汽车  科技

c++大小写转换:BCD和Binary之间的转换附C语言实现

c++大小写转换:BCD和Binary之间的转换附C语言实现#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));}//二进制转换为BCDstatic uint8_t ByteToBcd2(uint8_t Value){ uint32_t bcdhigh = 0U; while (Value >= 10U) { bcdhigh ; Value -= 10U; } ret

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的转换结果。

直接可用程序如下:

c++大小写转换:BCD和Binary之间的转换附C语言实现(1)

#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++大小写转换:BCD和Binary之间的转换附C语言实现(2)

猜您喜欢: