2016-02-25 34 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