H
hmuyu
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚接触delphi不久,本人又比较愚笨,所以想各位高手解决一下问题。不胜感激。
程序如下,其中i1,k1,s2为全局变量。
var
s1:string;
k:integer;
begin
richedit1.Text:=('e7'+ '01'+'c1'+'04'+'00'+'00'+s1+'e8');//s1为其中要求的异或效验值。
k:=length(richedit1.Text);
k1:=k div 2;
fillmemory(@sbuf,255,0);
for i1:=0 to (k div 2)-1 do
begin
s2:=s2+chr(strtoint('$'+copy(richedit1.Text,2*i1+1,2)));
end;
p:=pchar(s2);
copymemory(@sbuf,p,k1);//k1如果换成strlen(p),数据中如出现‘00‘的话,
后面的数据就会全变成零,不知道为什么。
senddata;
end;
function senddata;
var
commflg:boolean;
begin
str1:='';
commflg:=true;
for i1:=1 to (k div 2) do
begin
if not form1.Comm1.WriteCommData(@sbuf[i1,1) then
begin
commflg:=false;
break;
end;
sleep(0);
str1:=str1+inttohex(sbuf[i1],2)+'';
end;
str1:='发送'+str1;
form1.Memo1.Lines.Add(str1);
form1.Memo1.Lines.Add('');
if not commflg then messagedlg('发送失败',mterror,[mbyes],0);
end;
很奇怪,我接到的数据是‘E701C104....'全是大写了,谁能帮我改一下。再者不知道异或效验值的算法如何?
分不够可再加。
程序如下,其中i1,k1,s2为全局变量。
var
s1:string;
k:integer;
begin
richedit1.Text:=('e7'+ '01'+'c1'+'04'+'00'+'00'+s1+'e8');//s1为其中要求的异或效验值。
k:=length(richedit1.Text);
k1:=k div 2;
fillmemory(@sbuf,255,0);
for i1:=0 to (k div 2)-1 do
begin
s2:=s2+chr(strtoint('$'+copy(richedit1.Text,2*i1+1,2)));
end;
p:=pchar(s2);
copymemory(@sbuf,p,k1);//k1如果换成strlen(p),数据中如出现‘00‘的话,
后面的数据就会全变成零,不知道为什么。
senddata;
end;
function senddata;
var
commflg:boolean;
begin
str1:='';
commflg:=true;
for i1:=1 to (k div 2) do
begin
if not form1.Comm1.WriteCommData(@sbuf[i1,1) then
begin
commflg:=false;
break;
end;
sleep(0);
str1:=str1+inttohex(sbuf[i1],2)+'';
end;
str1:='发送'+str1;
form1.Memo1.Lines.Add(str1);
form1.Memo1.Lines.Add('');
if not commflg then messagedlg('发送失败',mterror,[mbyes],0);
end;
很奇怪,我接到的数据是‘E701C104....'全是大写了,谁能帮我改一下。再者不知道异或效验值的算法如何?
分不够可再加。