mscomm接收到的一帧数据为 ed 30 31 32 0d,VBS提供的字符串函数不能处理大于127的ascii码,那么用什么方法能检测到大于127的起始符“ed”呢?
最佳答案
当发送含有ascii码大于127的字符串的时候,就会造成丢失字节问题,解决方法如下:
发送:
procedure SendMessage(AMessage: String);
var
len,I : integer;
temp:Variant;
begin
len:=length(AMessage);
temp := VarArrayCreate([0, len-1], varbyte);
for I := 0 to len-1 do // Iterate
begin
temp[i] := ord(char(AMessage[i+1]));
end; // for
MSComm1.Output := temp;
end;
注意在VarArrayCreate的帮助中有这样一句话
Variant arrays with an element type of varByte are the preferred method of passing binary data between OLE Automation controllers and servers.
接收:
接收就简单多了
procedure ReceiveData(Sender: TObject);
var
temp: array of byte;
S:string;
begin
case FComm.commEvent of
comEvReceive:
begin
temp := MScomm1.input;
s:=string(temp); //S里面放的就是最后结果
end;
end;
end;
可参考:《MSCOMM完美发送接收string类型 》
http://blog.csdn.net/yuechuan/article/details/488085
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc223978.html