在C#中获取字符的十六进制值时,ASCII编码无法正常工作

时间:2013-11-12 08:21:37

标签: c# ascii

我有一个包含不同字符的文本文件,并希望转换HEX值中的每个字符。我正在使用Encoding.ASCII.GetBytes(),然后将每个字节转换为十六进制。

但每次结果都不正确。某些字符未显示正确的十六进制值和预期值。例如,charcter 'î'应根据提供的文档返回预期的十六进制值8C,但下面的代码将返回3F

使用的代码如下:

string myBytes = String.Empty;
string dp = "î";                 
byte[] bdp = Encoding.ASCII.GetBytes(dp);
foreach (byte b in bdp)
{
myBytes += b.ToString("x") + " ";
}

1 个答案:

答案 0 :(得分:5)

试试这种方式

string myBytes = String.Empty;
string dp = "î";                 

//byte[] bdp = Encoding.ASCII.GetBytes(dp);
byte[] bdp = Encoding.GetEncoding(437).GetBytes(dp);  //  <----- NOTE 437

foreach (byte b in bdp)
{
    myBytes += b.ToString("x") + " ";
}

参考:http://en.wikipedia.org/wiki/Code_page_437

编辑:

ASCII仅定义为0-127。 c#ASCII编码只能处理这么多字符。 î字符不在那些字符中。您可能正在讨论 ASCII ,因为它是在旧的MS-DOS和较旧的IBM-PC中。那些机器理解一组略有不同的字符。基础知识(31-127)与现代ASCII甚至Unicode相同。但其他不同。这种方言的角色叫做CODE-PAGE-437。