在UnicodeChar和Integer之间输入强制转换是否安全?

时间:2011-10-28 08:15:41

标签: delphi unicode casting

在2009年之前的Delphi(ANSI版本)中,您可以使用OrdChr将字符转换为字节,反之亦然。这很好,例如当你需要将char作为字节操作时:

var
  ch: char;
begin
  ch:= chr(ord(ch1) xor ord(ch2));
end;

显然,在较新的Delphis中,字符不再是一个字节而是两个字节。那么进行类型转换是否安全:

var
  ch: char;
begin
  ch:= Char(integer(ch1) xor integer(ch2));
end;

获得相同的结果?即使使用西里尔字母和阿拉伯字符,我到目前为止所做的测试工作正常,但你永远不知道。

1 个答案:

答案 0 :(得分:5)

根本不需要改变任何东西。完全像以前一样使用ord()chr()。这些与新的宽char类型完全相同。你的第一个代码块仍然是用Unicode Delphi编写它的惯用方法。

虽然chr()ord()的文档暗示这些函数使用Byte作为整数类型,但不要相信文档。这是错误的。