BCD码的表示方法

kandy2059   2008-8-28 12:34 楼主
BCD是什么?
用二进制数来表示十进制数的表示方法。
CD有两种形式,pack BCD, unpack BCD

1.pack BCD,压缩的BCD码

它是一种用四位二进制数表示十进制数. 首先是用四位二制数表示个数,然后用四位二进制数表示十位, 然后百位...。

比如:251需要三个四位二进制数表示。 1表示为0001;5表示为0101;2表示为0010.

最后251的BCD数据表示为0010 0101 0001.

2.unpack BCD.非压缩BCD

非压缩的BCD码用8位二进制数表示一个十进制数位,其中低4位是BCD码,高4位是0。

ASCII和BCD码对照表:




十进制数字ASCII码压缩BCD码非压缩BCD码
0
0011 000000000000 0000
10011 00010001
0000 0001
20011 001000100000 0010
30011 001100110000 0011
40011 010001000000 0100
50011 010101010000 0101
60011 011001100000 0110
70011 011101110000 0111
80011 100010000000 1000
90011 100110010000 1001











BCD码:
  BCD(Binary Coded Decimal)是用二进制编码表示的十进制数(见表3.3),十进制数采用0~9十个数字,是人们最常用的。在计算机中,同一个数可以用两种BCD格式来表示:①压缩的BCD码 ②非压缩的BCD码

  压缩的BCD码:
  压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数用一串BCD码来表示。例如,十进制数59表示成压缩的BCD码为0101 1001,十进制数1946表示成压缩的BCD码为0001 1001 0100 0110。

  非压缩的BCD码:
  非压缩的BCD码用8位二进制数表示一个十进制数位,其中低4位是BCD码,高4位是0。例如,十进制数78表示成压缩的BCD码为0000 0111 0000 1000。

  从键盘输入数据时,计算机接收的是ASCII码,要将ASCII码表示的数转换成BCD码是很简单的,只要把ASCII码的高4位清零即可。
ASCII和BCD码
十进制数字 ASCII码            压缩BCD码             非压缩BCD码
0                0011 0000        0000                          0000 0000
1                0011 0001        0001                          0000 0001
2                0011 0010        0010                          0000 0010
3                0011 0011        0011                          0000 0011
4                0011 0100        0100                          0000 0100
5                0011 0101        0101                          0000 0101
6                0011 0110        0110                          0000 0110
7                0011 0111        0111                          0000 0111
8                0011 1000        1000                          0000 1000
9                0011 1001        1001                          0000 1001

void BcdToAscii (char *ascii_buf, const BYTE *bcd_buf, int len)
{
int i;
char ch;

for (i=0; i {
  if (i & 1) ch = *(bcd_buf++) & 0x0f;
  else ch = *bcd_buf >> 4;
  ascii_buf = ch + ((ch > 9)? 'A'-10 : '0');
}
}

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复