ch2003_23 发表于 2009-4-8 22:34:30

Delphi7中怎样将串口发出的数据转化为浮点数,进行计算后,显示出来

串口发出的是十六进制的,经过Cport控件接受为String型,八个通道,每个通道占三个字节(24位AD),通过 Ch1 :=Str+Str+Str;……,转化为8个字符串后,我想将其转化为浮点数,并跟参考电压计算后,得到实际电压值,显示出来。但是无论用StringToInt(Ch1)还是StringToFloat(Ch1)都不能将其转化为浮点数,系统报错:
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_434350.JPG
Float (原文件名:Float Error.JPG)

http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_434351.JPG
Int (原文件名:Int Error.JPG)

请做过的大侠指教,谢谢!!!!!

bigluo 发表于 2009-4-8 22:39:15

如果字符串格式正确的话,用strtofloat应该可以转换。
出现这样的错误一般是因为字符串里面还有其它的非数字字符。

lysoft 发表于 2009-4-8 22:54:25

串口发出的是十六进制?
s是ASCII?还是Hex表达?
s in "0"~"9"~"A"~"F" ??
s in 0~255?
处理起来完全不一样的!

小数点另外处理
s in "0"~"9"~"A"~"F" ??
->
StrToInt('$' + s + s +...)

s in 0~255?
->
Ord(s) * $100 * $100 * ...幂运算 + ...

ch2003_23 发表于 2009-4-8 23:19:45

谢谢楼上两位

串口输出的十六进制数据,既有1,2……等数字,也由A~F等字母。比如说一个通道可能是:F1 E2 AC,是不是中间有字母的话,StringToInt(Ch1)和StringToFloat(Ch1)这两个函数就不能用?

对于 2楼 lysoft 前辈的问题:
s是ASCII?还是Hex表达? ------------应该是HEX形式
s in "0"~"9"~"A"~"F" ??
s in 0~255? ---------------不理解这句跟上面一句有什么区别,不都是00~FF之间的吗?

您说的两种方法我明天都试一下,谢谢!

knight_avr 发表于 2009-4-9 17:21:07

先自定义一个数据类型 如下:
type
    Tint32=record
      case integer of
            0:(V:integer);
            1:(arr:array of byte);
    end;
相当如C语言中的union

然后单片机把一个int32_t直接拆分成4个字节,发送过来,电脑接收串口数据放入Tint32.arr数组中 低-->>高

然后取 Tint32.V就是所得的值

浮点数也是一样的办法
把 0:(V:integer) 改成 0:(V:double)就可以了

rkfch 发表于 2009-9-10 09:21:45

学习了

lsw0136 发表于 2009-9-10 09:25:52

四楼牛人

jeoge 发表于 2010-7-30 08:23:01

strtofloat(Ch1);

cjr82123 发表于 2010-8-10 20:05:42

不错,参考。

lingchen888 发表于 2012-5-23 11:41:05

vc是用atof函数转换、、delphi不清楚、、计算部分也还没明白、、
页: [1]
查看完整版本: Delphi7中怎样将串口发出的数据转化为浮点数,进行计算后,显示出来