同一段代码,在delphi 2010和delphi 2007返回的结果不一样,请问题如何处理?(100)

  • 主题发起人 主题发起人 szlbz
  • 开始时间 开始时间
S

szlbz

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi 2010下使用AES加密时,发现不能解码delphi 2010以前版本的加密的字符串,调试跟踪到HexToStr函数返回的结果与delphi 2007的不一样.导致解码失败。 请问如何处理? 测试用字符串: 'BC488864C871421A9F699DDEF350E5BFCDEB713046AA66719B2C9062431903562472914E6BF1A6685DC5D933C9E90C7BD3E08162778F25EB0E9DB62029410EE600A92439359FE7D248634075EABEC6AE1D0B34A35799AC1F432052745CBAAB6F4A4F5D997DF6177BF926069A86BA5535207A6047A13BC4ADB9D64FED973841A4' function HexToStr(Value:AnsiString): AnsiString; var I: Integer; begin Result := ''; for I := 1 to Length(Value) do begin if ((I mod 2) = 1) then begin Result:=Result+chr(StrToInt('0x' + Copy(Value, I, 2))); end; end; end;
 
按盒子论坛garfield的方法解决了。只有将: Result:=Result+chr(StrToInt('0x' + Copy(Value, I, 2))); 改为: Result:=Result+AnsiStrToInt('0x' + Copy(Value, I, 2))); 就能正确解码。
 
...这还用问么?D2010用的是Unicode,也就是WideString,你返回AnsiString,也就是多字节字符集,当然要有问题了。“Result:=Result+chr(StrToInt('0x' + Copy(Value, I, 2))); ”D2010下Char是WideChar,你用它,岂不是转换成了WideString。最简单的改成AnsiChar()。二楼的肯定要出错的,Result是AnsiString和Integer不可能兼容啊。
 
后退
顶部