Microchip
直播中

杨芳

7年用户 287经验值
私信 关注
[问答]

如何加快16位二进制值转换为BCD的速度?

我有一个16位二进制值,我需要转换为BCD。我使用下面的函数,但是转换很慢,导致显示为blink.void binary_to_bcd(无符号的char*string,UINT16 x){int temp1;UINT16 tval;for(temp1=4,tval=x;temp1>0;){temp1--;*string=tval%10;*tval/=10;string+;}我发现按照下面的算法,但我不知道如何设置数组。for(i=0;i<8;i++){//检查每列{if(列>=5)列+=3;//将所有二进制数字左移100d<=1;100ds[0]=Tens[3];Tens<=1;0 ]=1(3);1和lt;=1;0(= 0)=二进制[7 ];二进制& lt;lt;=1;}此代码缺少括号。我很感激一些方向。谢谢。

回帖(5)

陈鲜孰

2019-8-12 09:31:32
%DEITY%只知道代码试图做什么,但是基本的算法,称为“双Dabble”,是从二进制数中取出MSB开始的位,然后左移到变量中,该变量将成为已打包的BCD数。在每个位被移位之后,BCD号码中的每个小数点都必须被校正,从最右边开始,如果小数点在5或5以上,则从最右边加上3,这样就可以修复二进制数和BCD之间的差异,从而进行下一个移位。对于大的N,需要移位和BCD数字的数目与比特数成比例,执行时间按N2表示,其中N是比特数。
举报

王璨

2019-8-12 10:08:48
我们最近在同一个问题上有一个疯狂的话题。无法找到它,因为已经有60多篇博文了。找到另一个链接:https://en.wikipedia.org/wiki/._dabble#C_implementation根据链接中的算法将二进制文件转换为一串BCD数字。向每个BCD数字.printf t添加'0'的偏移量。他用绳子代替长条,这就意味着你真的长了64英寸。OTHH此转换适用于任意数量的位。
举报

王璨

2019-8-12 10:38:39
不可能成为世界上所有论坛的成员。这将有助于在论坛内有一个稍微强大的搜索功能。或者更长的历史,但是“帖子我的帖子”出现了。
举报

张丽

2019-8-12 10:47:18
我在这里发布了一个基于数组的双重涉猎的实现。这种方法适用于任何大小的二进制输入。注意,对于每个n位输入,都有INT(1+n*LOG(2))*4位输出,或者多输出大约30%。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分