Var
Query_Card:Array[1..18]of Char;
CurMsComm:TMsComm;
Begin
CurMSComm:=MSComm;
Hstr:=KeyStr;
Hstr:='3c0e01711390581508680000d1a8bd24';
//将一组十六进制的串转化成单个的十六进制字符
For i:=1 to trunc((length(Hstr))/2) Do
Begin
Query_Card[i]:=Chr(StrToIntDef('$'+Copy(HStr,i*2-1,2),10));
End;
//将一组单个的十六进制字符发送给串口
CurMSComm.Output:=Query_Card[1]+Query_Card[2]+Query_Card[3]+Query_Card [4]+Query_Card[5]+Query_Card[6]+Query_Card[7]+Query_Card[8]+Query_Card[9]+Query_Card[10]+Query_Card[11]+Query_Card[12]+Query_Card[13]+Query_Card[14]+Query_Card[15]+Query_Card[16;
End;
现在的问题是:如果串的后几位‘d1a8bd24’的值偏大的话,接收到的数据就不对,
接收到的数据会少一位。如果串的后八位的值小一点的话,接收的数据为正确的,请问
问题出在哪里?
Query_Card:Array[1..18]of Char;
CurMsComm:TMsComm;
Begin
CurMSComm:=MSComm;
Hstr:=KeyStr;
Hstr:='3c0e01711390581508680000d1a8bd24';
//将一组十六进制的串转化成单个的十六进制字符
For i:=1 to trunc((length(Hstr))/2) Do
Begin
Query_Card[i]:=Chr(StrToIntDef('$'+Copy(HStr,i*2-1,2),10));
End;
//将一组单个的十六进制字符发送给串口
CurMSComm.Output:=Query_Card[1]+Query_Card[2]+Query_Card[3]+Query_Card [4]+Query_Card[5]+Query_Card[6]+Query_Card[7]+Query_Card[8]+Query_Card[9]+Query_Card[10]+Query_Card[11]+Query_Card[12]+Query_Card[13]+Query_Card[14]+Query_Card[15]+Query_Card[16;
End;
现在的问题是:如果串的后几位‘d1a8bd24’的值偏大的话,接收到的数据就不对,
接收到的数据会少一位。如果串的后八位的值小一点的话,接收的数据为正确的,请问
问题出在哪里?
我单步跟踪发现每个QUERY_CARD[]都已经赋了值,比如‘24’对应的字符为'$',也就是十六进制的24,十进制的36,而‘BD’对应的字符为#189,
但接收到的结果是‘BD’、‘24’两个十六进制对应的结果只有一个字符‘3F’,而正确的结果是‘BD’‘24’。
你试试用widechar看看
对是默认值!
我试过用WIDECHAR 但在
CurMSComm.Output:=Query_Card[1]+Query_Card[2]+Query_Card[3]+Query_Card [4]+Query_Card[5]+Query_Card[6]+Query_Card[7]+Query_Card[8]+Query_Card[9]+Query_Card[10]+Query_Card[11]+Query_Card[12]+Query_Card[13]+Query_Card[14]+Query_Card[15]+Query_Card[16];处,编译通不 过,数据类型不对!
该如何写?
能不能说更具体一点?
如:d1a8bd24 就要发送为#$81#$d1#$81#$a8#$81#$bd#$24
接收的时候将第一个#$81去掉就行了。