我有一个包含不同字符的文本文件,并希望转换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") + " ";
}
答案 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。