2015-04-15 42 views
1

任何人都可以告訴我,爲什麼我會得到不同的‰符號值? 我Delphi7的代碼是 -C#與Delphi-兩個代碼給出了不同的值‰

k := ord('‰'); //k is of type longint; receiving k as 137 

我的C#代碼是 -

k = (long)('‰');//k is of type long; receiving k as 8240 

請給我一個解決方案,那我怎樣才能在C#中相同的值?因爲Delphi代碼解決了我的目的。

+1

我恢復了您的問題編輯。請讓我們專注於這個問題,然後再討論另一個問題。 –

回答

7

C#將文本編碼爲UTF-16。 Delphi 7將文本編碼爲ANSI。這就是區別。你不會像喜歡那樣比較。

你問如何獲得該字符的ANSI序數值。使用new Encoding(codepage)獲取與您的Delphi ANSI編碼匹配的Encoding實例。您需要知道您正在使用哪個代碼頁才能完成此操作。然後在該編碼實例上調用GetBytes

舉例來說,如果你的代碼頁是1252,那麼你會寫:

enc = new Encoding(1252); 
byte[] bytes = enc.GetBytes("‰"); 

或者,如果你要使用系統默認ANSI編碼你可以使用

byte[] bytes = Encoding.Default.GetBytes("‰"); 

人們不禁要問,爲什麼你正在問這個問題。在這裏回答了很多問題,我想知道你是否正在執行某種加密,哈希或編碼,並且正在使用一些使用AnsiString變量作爲字節數組的Delphi代碼作爲參考。在這種情況下,雖然Encoding.GetBytes是你所要求的,但這不是你所需要的。你需要的是停止使用字符串來保存二進制數據。使用字節數組。在Delphi和C#中。

+0

是的我的意思是(長)'‰' –

+0

我如何才能知道代碼頁的價值,因爲Delphi代碼是由第三方編寫的? –

+0

'Encoding.Default'是os活動代碼頁的編碼。這符合你的Delphi代碼。代碼試圖做什麼? –

相關問題