从十六进制转换为文本

时间:2018-08-04 06:08:14

标签: c# hex ascii

关于this tool,我需要转换十六进制数据,无论其组合为等效文本如何。例如:

"HelloWorld" = 48656c6c6f576f726c64;

该解决方案需要考虑到十六进制可以按不同的长度分组:

48656c6c 6f576f72 6c64
or
48 65 6c 6c 6f 57 6f 72 6c 64

上面提供的所有十六进制值在转换为文本时均读为HelloWorld

1 个答案:

答案 0 :(得分:0)

首先,我想指出这个问题在网络上已经问过很多次了(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[],现在就可以将{{1} }数据放入byte中。可以使用ASCII中名为Encoding.ASCII的{​​{3}}来完成:

GetString

最终结果 :将所有这些插入您的应用程序,您将成功将十六进制数据转换为清晰可读的文本:

string text = Encoding.ASCII.GetString(bytes);

上面的代码会将以下文本打印到控制台:

  

请阅读a method