从十六进制转换为文本

Posted

技术标签:

【中文标题】从十六进制转换为文本【英文标题】:Convert from Hexadecimal to Text 【发布时间】:2019-01-11 23:00:26 【问题描述】:

关于this tool,我需要将十六进制数据转换为等效文本,而不管它们的组合如何。例如:

"HelloWorld" = 48656c6c6f576f726c64;

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

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

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

【问题讨论】:

【参考方案1】:

首先,我想指出,这个问题在网上已经被问过很多次了(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。

【讨论】:

以上是关于从十六进制转换为文本的主要内容,如果未能解决你的问题,请参考以下文章

JAVA如何将二进制数转换成文件?

将十六进制的列转换为R中的文本

将十进制从文本框转换为带有 2 个小数点的变量 [重复]

在 Power Query 中将负文本转换为十进制数

如何从 4 位十六进制转换为 7 位 ASCII?

如何将十六进制字符串转换为R中的文本?