2011-10-28 13 views
3

2009年以前のDelphi(ANSIランド)では、文字をバイトに変換する場合はOrdChrを使用できます。逆の場合も同様です。あなたがバイトとして文字を動作させるために必要な場合には、たとえば、良かった:UnicodeCharとIntegerの間にキャストを入力するのは安全ですか?

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

、新しいデルフィスの文字にはもはやバイトではなく、2。タイプキャスティングは安全ですか:

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

同じ結果を得るには?キリル文字やアラビア文字を使用していても、これまでに行ったテストはうまく動作しますが、わからないことがあります。

答えて

5

何も変更する必要はありません。以前のように正確にord()chr()を使用してください。これらは、新しいワイドcharタイプとまったく同じ方法で動作します。あなたの最初のコードブロックは、Unicode Delphiでこれを書く慣用方法です。

chr()ord()のドキュメントでは、これらの関数が整数型としてByteを使用していることを示していますが、ドキュメントを信じてはいけません。違います。

+0

ありがとうございました。私は尋ねました。(少なくともDelphi 2010では)マウスでchrを強調表示すると、ツールチップが表示されます:System.AnsiCharが返され、引数を入力するときにツールチップにバイトが必要と表示されます)。しかし、あなたは正しいです、それはバイトより高い値を食べるように見え、正しい文字を出します。 – Lobuno

+0

Integer型はCharとWideCharでは 'Word'ですが、AnsiCharでは' Byte'ですか? –

+0

@JensMühlenhoffはい、それは私の信念です。ドキュメンテーションが追いついたらとてもいいですね。 –

関連する問題