2011-10-28 18 views
3

在2009年之前的Delphi(ANSI land)中,您可以使用OrdChr將字符轉換爲字節,反之亦然。這是很好的,例如當你需要操作一個字符作爲一個字節:在UnicodeChar和Integer之間打字是否安全?

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; 

獲得相同的結果?即使使用西裏爾字母和阿拉伯字符,我迄今爲止所做的測試也能正常工作,但您永遠不知道。

回答

5

沒有必要改變任何東西。與以前一樣繼續使用ord()chr()。它們的工作方式與新型寬幅char類型完全相同。你的第一塊代碼仍然是在Unicode Delphi中編寫這種代碼的慣用方法。

雖然chr()ord()的文檔暗示這些函數使用Byte作爲整型,但不要相信文檔。這是錯誤的。

+0

謝謝。我問,因爲(至少在Delphi 2010中)用鼠標突出顯示chr會顯示工具提示:返回System.AnsiChar,並且在發送參數時,工具提示表示它期望一個字節)。但是你是對的,它似乎比一個字節吃的更高的值,並給出正確的字符。 – Lobuno

+0

所以對於Char和WideChar來說整數類型是'Word',但AnsiChar是'Byte'? –

+0

@JensMühlenhoff是的,這是我的信念。如果文檔能夠趕上,這將是非常好的。 –

相關問題