您的位置:首页 > 其它

BCD码转换成二进制和ASCII码

2015-01-17 16:32 218 查看
首先得知道什么是BCD码,可以看下百度,基本定义已经讲清楚了,百度链接:BCD码--百度百科;这里要说的也是最常用的一种BCD码:8421码。本文规定若没有特殊说明时,各个数值只会是十进制数、二进制数、ASCII值其中的一种进制数。

BCD码是用4位二进制数(各个位的权重分别为:8421,所以叫8421码)来表示一位十进制数。这里的一位十进制数要特别说明下,一位十进制数只能是 0~9之间的一个数值。比如:6 就是表示一位十进制数6;66则是表示两位十进制数;666则是表示三位十进制数;(好像有点啰嗦,但这个细节很重要)

BCD码转二进制

用实例分析:十进制数 29;

用BCD码表示:十位上的十进制数为 2 == BCD码表示为 0010;个位上的十进制数9 === BCD码表示为 1001;所以总的来说 十进制数 29 用BCD码表示为:0010 1001

转换过程:把BCD码 0010(十进制数为十位上的 2)右移4位(其实表示当作一个个位数,或者说单纯的数值),然后乘以10 还原到十进制的权重(因为这个数本来表示的就是十进制数中的十位)。处理完十位上的数,接着处理个位上的数。因为BCD码的权重和二进制的前四位权重是一样(2^n,n为位数),所以直接用前面的十位上的数加上它就可以了。

简单点分析:0010(十位上的2 BCD码表示)× 10 + 1001(个位上的9 BCD码表示)= 29的二进制数

C代码表示:#define BCD_TO_BIN(val) ((((val) >> 4) * 10) + ((val)&15))

BCD码转ASCII码(还是用上面的十进制数29分析)

BCD码表示:对于用BCD码怎么表示十进制数29上面已经分析的非常清楚了,这里不赘述了。十进制数29 === BCD码表示为:0010 1001

转换过程:和上面转换成二进制数类似,只是这个没有权重值,可以直接转换。BCD码 0010 转换成ASCII码就直接加上 十六进制数0x30(十进制为48)就可以了,这个差值可以根据ASCII和十进制数换算下。同样的各位上的数也相加下就可以了;

C代码表示:#define BCD_TO_ASCCII(val) (((((val) >> 8) + 0x30) << 8) + (((val) & 0xFF) + 0x30))

汇编表示:
bcd_to_ascii:                            ;BCD码转ASCII
                                         ;输入:AL=bcd码
                                         ;输出:AX=ascii
      mov ah,al                          ;分拆成两个数字 
      and al,0x0f                        ;仅保留低4位 
      add al,0x30                        ;转换成ASCII 

      shr ah,4                           ;逻辑右移4位 
      and ah,0x0f                        
      add ah,0x30


转载请注明作者和原文出处,原文地址:/article/1328189.html

若有不正确之处,望大家指正,共同学习!谢谢!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐