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)
请做过的大侠指教,谢谢!!!!! 如果字符串格式正确的话,用strtofloat应该可以转换。
出现这样的错误一般是因为字符串里面还有其它的非数字字符。 串口发出的是十六进制?
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 * ...幂运算 + ... 谢谢楼上两位
串口输出的十六进制数据,既有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之间的吗?
您说的两种方法我明天都试一下,谢谢! 先自定义一个数据类型 如下:
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)就可以了 学习了 四楼牛人 strtofloat(Ch1); 不错,参考。 vc是用atof函数转换、、delphi不清楚、、计算部分也还没明白、、
页:
[1]