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

Lob*_*uno 3 delphi unicode casting

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

var
  ch: char;
begin
  ch:= chr(ord(ch1) xor ord(ch2));
end;
Run Code Online (Sandbox Code Playgroud)

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

var
  ch: char;
begin
  ch:= Char(integer(ch1) xor integer(ch2));
end;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 5

根本不需要改变任何东西.继续使用ord()chr()完全一样.这些与新的宽char类型完全相同.您的第一个代码块仍然是在Unicode Delphi中编写此代码的惯用方法.

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