admin

[应用技巧] 十六进制数据异或运算

edt1.text:='85 11 0F C2 59 08 04 00 01 21 4D 61 77 10 BE 1D';

edt2.text:='22 53 7E 00 5F 03 05 80 87 DA D5 FF 02 02 09 09';


  s.DelimitedText:=edt1.Text;

  edt3.Clear;

  for i:=0 to 15 do

    begin

      a:=StrToInt('$'+s[i]);

      b:=StrToInt('$'+copy(edt2.Text,46,2));   //取edt2.txt最后两位作为异或运算第二个数据

      c:=a xor b;

      if edt3.Text='' then

         edt3.Text:=myStrToHex(Chr(c))

      else

         edt3.Text:=edt3.Text+' '+myStrToHex(Chr(c));

    end;






function myStrToHex(s:string):string; //字串转16进制     

var    

  TmpStr:string;    

  i:integer;    

begin    

  TmpStr:='';    

  for i:=1 to Length(s)do    

    TmpStr:=TmpStr+IntToHex(ord(s[i]),2);    

  Result:=TmpStr;    

end;    


function myHexToStr(S:string):string; //16进制转字串     

var    

  HexS,TmpStr:string;    

  i:Integer;    

  a:Byte;    

begin    

  HexS:=s;    

  if Length(HexS) mod 2=1 then    

    HexS:=HexS+'0';    

  TmpStr:='';    

  for i:=1 to(Length(HexS)div 2)do    

  begin    

    a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);    

    TmpStr:=TmpStr+Chr(a);    

  end;    

  Result:=TmpStr;    

end;


#1楼
发帖时间:5月前   |   查看数:0   |   回复数:0
游客组