bcd码是什么_bcd码怎么换算

含义:用4位二进制数来表示数值中的1位(十进制数中的0~9这10个数字),简称BCD码,即BCD代码

也可以这样理解:就是将十进制的数以8421的形式展开成二进制(14 以8421形式展现成二进制就是00010100 十进制表示就是20)

14的BCD码为20.

函数的作用就是把20变成14. 怎么把20变成14呢?从定义出发, 每一位用4位二进制表示.那就把BYTE的前4位*10,加上后四位即可。通过现象看本质。就这句话。

bcd码是四位二进制码, 也就是将十进制的数字转化为二进制, 但是和普通的转化有一点不同, 每一个十进制的数字0-9都对应着一个四位的二进制码,对应关系如下: 十进制0 对应 二进制0000 ;十进制1 对应二进制0001 ....... 9 1001 接下来的10就有两个上述的码来表示 10 表示为00010000 也就是BCD码是遇见1001就产生进位,不象普通的二进制码,到1111才产生进位10000

/******************************************************************************

 *  Function        : bcd2val

 *  Description     : Convert one BYTE packed BCD to binary value.

 *  Input           : bcd;    // one BYTE packed BCD.

 *  Return          : binary value.

 *  Note            : N/A

 *  Globals Changed : N/A

 ******************************************************************************

 */

DWORD bcd2val(BYTE bcd)

{

  return ((bcd>>4)*10 + (bcd & 0x0f));

} /* bcd2val */

bcd2val(20)=

(1)、 00010100>>4=00000001

(2)、 1*10=10

(3)、 bcd&0x0f=00000100

(4)、10+4=14 十六进制表示为e

把word型的数据(BCD)也转换成二进制值。

DWORD bcd2bin(WORD bcdval)

{

  return(bcd2val((BYTE)(bcdval/256))*100 + bcd2val((BYTE)(bcdval%256)));

}

 除以256相当于右移动8位,即把前一个字节转成二进制值,+后一个字节的BCD码值转换成二进制值。

BCD转成 二进制值输出 这个函数写的好像有问题。

DWORD bcd2val(BYTE bcd)

{

 return ((bcd>>4)*10 + (bcd & 0x0f));

 

}

如果用BCD码 20 赋值进去好像,没问题。算出来的值为 14

如果用241去计算的话。算出来值是 151也是完全正确的。 eg:

1、241的BCD码 的十进制值 为151 .

2、256的BCD码 十进制值是100 二进制为0X64