2016-02-25 30 views
1

我不得不將VB6的加密解密函數複製到csharp中。我遇到了擴展ascii字符的問題。例如,所討論的字符的擴展ASCII值爲155(看起來像'>'的較小版本)。在csharp中將擴展字符轉換爲int

我從谷歌學到搜索,有很多擴展ASCII版本(頁?),但我只需要標準的Latin-1在此顯示http://www.ascii-code.com/

但我無法找到一個明確的方式做什麼,我需要。我需要的是從角色中獲得值155(以及擴展集合中的其他值)的方法。 VB6用一個簡單的Asc(String)語句來做到這一點。我只需要一種方法來模擬csharp中的這個語句。

+0

從字符串中提取char並將其轉換爲int。 – Kevin

+0

不幸的是,它給出的值是8250 - 不是155.這是unicode字符的值(2字節不是1) – Belmiris

+0

不好意思把它當作字節 – Kevin

回答

4

你可以做這樣的事情:

string str = "›"; 
var encoding = System.Text.Encoding.Default; 
var values = encoding.GetBytes(str); //Result is { 155 } 

這裏的技巧是讓爲Windows-1252代碼頁的編碼對象,然後使用GetBytes將字符串轉換成字節數組。

+0

謝謝!其實我只是在看到你的答案之前就明白了。訣竅在於谷歌的'csharp從擴展ascii獲取char'而不是其他方式。無論如何,再次感謝你! – Belmiris

+0

實際上VB6使用「ANSI」代碼頁 - 即運行代碼的計算機上控制面板上的非Unicode程序的設置。這在每臺電腦上都不會是1252。因此,從VB6到C#的嚴格轉換將使用['System.Text.Encoding.Default'](https://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx)而不是GetEncoding (1252) – MarkJ

+0

@MarkJ你說得對。謝謝。 – vcsjones