加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

BCD码的表示方法

(2011-03-20 17:37:49)
标签:

it

分类: 疑问详解

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 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










 

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码
               0011 0000        0000                          0000 0000
               0011 0001        0001                          0000 0001
               0011 0010        0010                          0000 0010
               0011 0011        0011                          0000 0011
               0011 0100        0100                          0000 0100
               0011 0101        0101                          0000 0101
               0011 0110        0110                          0000 0110
               0011 0111        0111                          0000 0111
               0011 1000        1000                          0000 1000
               0011 1001        1001                          0000 1001

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

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有