mscomm接收到的一帧数据为ed3031320d,VBS提供的字符串函数不能处理大于127的AScii码,那么用什么方法能检测到大于127的起始符“ed”呢?
最佳答案
当发送含有ascii码大于127的字符串的时候,就会造成丢失字节问题,解决方法如下:
发送:
proCEdureSendMessage(AMessage:STring);
var
len,I:integer;
temp:Variant;
begin
len:=length(AMessage);
temp:=VarArrayCreate([0,len-1],varbyte);
forI:=0tolen-1do//Iterate
begin
temp[i]:=ord(char(AMessage[i+1]));
end;//for
MSComm1.OuTPut:=temp;
end;
注意在VarArrayCreate的帮助中有这样一句话
VariantarrayswithanelementtypeofvarBytearethepreferredmethodofpassingbinarydatabetweenOLEAutomationcontrollersandservers.
接收:
接收就简单多了
procedureReceiveData(Sender:TObject);
var
temp:arrayofbyte;
S:string;
begin
caseFComm.commEventof
comEvReceive:
begin
temp:=MScomm1.input;
s:=string(temp);//S里面放的就是最后结果
end;
end;
end;
可参考:《MSCOMM完美发送接收string类型》
http://blog.csdn.net/yuechuan/aRTicle/details/488085
提问者对于答案的评价: