关于二进制转换成BCD码的问题(50分)

  • 主题发起人 主题发起人 fyz21cn
  • 开始时间 开始时间
F

fyz21cn

Unregistered / Unconfirmed
GUEST, unregistred user!
各位Delphi爱好者,大家好。
近日,我参考了一个Delphi的串口通信的源程序,其中有一个二进制转换成BCD码的函数,
不甚明白,如果哪位有时间,请帮忙提点一下,谢谢。
代码如下:
function TfrmMain.Ch_Bin_to_BCD(v:byte):byte;
begin
Ch_Bin_to_BCD:=(v div 10)*16 + (v mod 10);
end;
我主要是不知道这个byte类型的v是表示一个字节的二进制码,还是其它意思。平时看的书
只提到了二进制与十、八、十六进制的转换,好象没有提到过它的加减乘除。
 
v 是正常的单字节整数。

 
jsxjd,你好。谢谢你的回答。
不过,从函数的名字来看,它是将一个二进制码转化为BCD码。比如v是254整数,那么,它
除10得到25,然后再乘以16,得400,加上除以10得到的4。最后的数是404(二进制是110010100)?
而BCD码的定义是指每位十进制数用4位二进制数编码表示的方法。即254的BCD码表示方法为:001001010100。
好象没有一个扯得上关系?请指教,谢谢。
代码:
 
注意是单字节的,最大才为 255,计算机中的表示总是二进制的。
而且进行这一转换时,你的 v 的值是有限制的,只能是:
0 - 9 ,是十进制的一位,对十进制的转换,首先要得到十进制
的每一位,当然可以用循环来做:
var
i,v:integer;
begin
while i>0 do
begin
v:=(i mod 10);
////////// 转换这个 v ,得到一位BCD码。
i:=i div 10;
end;
上面只是一个示意。
 
我一般这么转换
StrToInt('$'+IntToStr(aIntValue));
 
多人接受答案了。
 
后退
顶部