200分够吗?菜鸟使用mscomm控件从仪表里采集的数据的类型是ASCII码的,请问怎么把他转换成字符串???(200分)

  • 主题发起人 xiaoxiami1
  • 开始时间
X

xiaoxiami1

Unregistered / Unconfirmed
GUEST, unregistred user!
菜鸟使用mscomm控件从仪表里采集的数据的类型是ASCII码的,请问怎么把他转换成字符串??
 
怎么开了两个帖子啊,前一个100分的就够解决问题了
 
我很着急啊?我还不知道仪表会输出什么东西,但肯定不是65这么简单??您用过mscomm采集过
ASCII吗?能给一段代码吗?
 
这个没有用过,如果出来的的确只是ASCII的话还是好转换的,对了应该是16进制的吧
这样每次截取两个字符然后转换过来
 
如果你不会转换的话,就用VB做吧,在VB里自动转换的
 
如果出来的的确只是ASCII的话还是好转换的,你去看就知道了,还是给你一段16进制的吧!!
ASCII就更简单了!!
procedure Tdihengjianjin.MSComm2Comm(Sender: TObject);
var
outstr, outstr1, flag1: string[10];
i, j, l, leninbuf, temp1: integer;
InTempS: variant;

sqh1, sqh2: string;
begin
/////////读16进制的数据
{从串口读取数据到variant变量中}
intemps := Mscomm1.Input;
{转换后的结果存于outstr}
outstr := '';
LenInBuf := VarArrayHighBound(InTempS, 1) + 1;
//转换二进制为16进制{FF 08 60 12 00}车重为1260kg
{如果缓冲区字节超过5个再读取处理}
if LenInBuf >= 5 then
begin
{将后三个数据位转换二进制为16进制}
for i := 5 downto 3 do
outstr := outstr + inttohex(Byte(InTempS[i - 1]), 2);
{处理有效数据前面的零位}
j := length(outstr);
//计算第一个非零值所在位置存于变量L中
i := 1;
while (outstr = '0') do
begin
i := i + 1;
end;
L := i;
//从第一个非零值所在位置拷贝数据到变量outstr1中
outstr1 := copy(outstr, L, j - L + 1);
label15.caption := outstr1;
end;
 
自己写一个函数不就行了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
977
SUNSTONE的Delphi笔记
S
S
回复
0
查看
799
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
682
import
I
顶部