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