我正在尝试像这样制作一串十六进制


  4100200062006C0061006E006B002000630061006E0076006100730020007200650063006F006D006D0065006E00640065006400200066006F007200200046006F007200670065002000650064006900740069006E00670020006F006E006C0079002E


转换为ASCII,如下所示:


  建议仅用于Forge编辑的空白画布。


十六进制的变量是从我打开程序的文件中收集的,读取特定的地址,如下所示:

BinaryReader br = new BinaryReader(File.OpenRead(ofd.FileName));
string mapdesc = null;

for (int i = 0x1C1; i <= 0x2EF; i++)
{
    br.BaseStream.Position = i;
    mapdesc += br.ReadByte().ToString("X2");
}

richTextBox1.Text = ("" + mapdesc);


现在有了mapdesc,我将其打印到richtextbox中,看起来就像是十六进制的一行。我也希望它看起来像可读的ASCII。

在Hex Editor中,ANSI的另一面看起来像


  A.b.l.a.n.k. 。帆布。 。推荐的。 。对于。 。锻造。 .e.d.i.t.i.g。 。只要


点在十六进制视图中是00,因此我相信在ASCII格式下,它们应为零,以便我得到可读的句子,这就是游戏读取它的方式。如何将mapdesc转换为ASCII?

最佳答案

公平地说,输出与解码输出完全匹配,问题实际上出在输入数据上。

如果仔细观察,您会注意到,使用一些简单的启发式方法,其他任何一对字符都是00,我们可以确定这里有16位字,即4个十六进制字符。

您面临的问题以及.字符的原因是,当将其解码为UTF-8时,其他所有字符都将为null。

您有两种解决方案可以解决此问题:

要继续以UTF-8解码,请从字符串中删除所有其他_00_s空字符。

要么

在UTF-16解码

如果选择此选项,则您的数据仍然有问题-第一个字只有8位,这将导致其他字节之间的移位。要在UTF-16中进行解码,请在数据blob的开头加上一个额外的00(或将循环早一点开始)

关于c# - 十六进制线到ASCII,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43195456/

10-13 06:37