Delphi XE3: Chr Ansi版本是什么?

3
我有自己的D6 pas库,其中包含加密功能。 今天我尝试在XE3下使用它,但由于unicode出现了很多bug。 我试图转换为AnsiString,但在Delphi6中chr(nnn)只支持8位,所以失败了。
我来解释一下问题:
    Str := chr(hchar);
    AStr := Str;

Str - 字符串; AStr - Ansistring。

当hchar为216 (直径)时,AStr变成了"O",这是Ascii码的79...此时我失去了原始值。

是否有Ansi Chr函数?例如: "AChr(xxxx)"

或者我需要改变我的代码,在内部部分不使用字符串,只使用字节,然后将这些字节转换为AnsiString吗?

感谢任何建议、帮助和信息!

dd


1
加密是关于字节而不是字符的。首先确保您的代码在Delphi 6中使用字节结构(字节数组)正常工作(使用测试框架如DUnit验证正确性)。然后将您的代码移植到更新的Delphi版本。 - Jeroen Wiert Pluimers
1个回答

5
您可以编写AnsiChar(SomeOrdinalValue)来创建具有特定序数的AnsiChar。因此您的代码应该如下所示:
AStr := AnsiChar(hchar);

问题出在问题中的代码将字符串转换成了UTF-16并进行了反向操作。
在我看来,您使用的字符类型与加密代码不匹配。请使用一个字节数组 TBytes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接