首先,我想指出,这个问题在网上已经被问过很多次了(here 就是一个例子)。但是,我将一步一步地为您分解,希望能教您如何不仅利用网络上的可用资源,而且如何解决您的问题。
概述:在现代开发语言中,将十六进制数据转换为人类可读的文本是一个直接的过程;您清理数据(确保没有非法字符),然后转换为byte 级别,以便您可以使用原始数据。最后,您将使用 Microsoft 已创建的方法将原始数据转换为可读文本。
重要提示:请记住,要使转换生效,您必须确保以与开始时相同的格式进行转换:
ASCII -> ASCII: Works Great!
ASCII -> UTF7: Not so much...
删除非法字符:您需要做的第一件事是确保您提供的十六进制值不包含任何非法字符。最简单的方法是创建一个可接受的字符数组,然后在循环中删除除这些字符之外的任何内容:
private string GetCleanHex(string hex) {
string legalCharacters = "0123456789ABCDEF";
string result = hex.ToUpper();
foreach (char c in result) {
if (!legalCharacters.Contains(c))
result = result.Replace(c.ToString(), string.Empty);
}
}
获取字节数组:清除所有非法字符后,您现在可以将十六进制字符串转换为 byte array。这是从十六进制转换为ASCII 所必需的。此步骤由上面的链接帖子提供:
private byte[] GetBytesFromHex(string hex) {
byte[] bytes = new byte[result.Length / 2];
for (int i = 0; i < bytes.Length; i++)
bytes[i] = Convert.ToByte(result.Substring(i * 2, 2), 16);
}
转换为文本:现在您已经清理了数据并将其转换为 byte[],您现在可以将 byte 数据转换为 @ 987654333@。这可以使用Encoding.ASCII 中的a method 来完成,称为GetString:
string text = Encoding.ASCII.GetString(bytes);
最终结果:将所有这些插入到您的应用程序中,您将成功地将十六进制数据转换为干净、可读的文本:
string hex = GetCleanHex("506c 65 61736520 72 656164 20686f77 2074 6f 2061 73 6b 2e");
byte[] bytes = GetBytesFromHex(hex);
string text = Encoding.ASCII.GetString(bytes);
Console.WriteLine(text);
Console.ReadKey();
上面的代码会将以下文本打印到控制台:
请阅读how to ask。