高分请教高手:我把BCD格式数据,用MSComm控件的二进制读取出来。然后如何处理成十进制数。分不够可再加

dicke 2005-06-10 04:20:12
我把BCD格式数据,用MSComm控件的二进制读取出来。然后如何处理成十进制数,我怎么知道是否有小数点,如果有小数位,小数点在什么位置如何得知?请给出源码.分不够可以再加!
例如:我的BCD编码是FFH OBH 34H 12H 00FF,这个是低位在前、高位在后的压缩BCD编码.第一、二位为标识码,最后一位是结束码。请问如何转换?请给出源码或思路。分不够可以再加!
...全文
96 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovend 2005-06-29
  • 打赏
  • 举报
回复
帮你顶
dicke 2005-06-29
  • 打赏
  • 举报
回复
还有其它的方法吗?
gg137zeus 2005-06-10
  • 打赏
  • 举报
回复
up
gzmhero 2005-06-10
  • 打赏
  • 举报
回复
function ReadBufIntBCD(p:pChar;len:integer):integer;
var
iValue,i:integer;
begin
iValue:=0;
for i:=len-1 downto 0 do
begin
iValue:=(iValue*100)+StrToInt(IntToHex(Byte(p[i]),2));
end;;
Result:=iValue;
end;

调用:

iValue:=ReadBufIntBCD(@buf[2],2);

///////////////buf为$ff $0b $34 $12 $00 $ff的缓冲区
hexenzhou 2005-06-10
  • 打赏
  • 举报
回复
去除起始码和结束码,BCD值为34H 、12H、00H 。根据低位在前,高位在后的原则,换算成十进制应为1234,BCD本身无法判断是否有小数位,小数位应该根据你的通信协议来换算。你可以用移位的方法来得到你的十进制值。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧