bcd转ascii码 流程图_BCD码转换成二进制和ASCII码

首先得知道什么是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

若有不正确之处,望大家指正,共同学习!谢谢!!!

原文:http://blog.csdn.net/yuzhihui_no1/article/details/42806245

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值