我正在尝试制作像
这样的十六进制字符串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。
在十六进制编辑器中,用ANSI读取的另一面看起来像
一个。 。空白。 。帆布。 。推荐的。 。对于。 。锻造。 .e.d.i.t.i.n.g。 .o.n.l.y
十六进制视图中的点是00
s,所以我相信ASCII格式,它们应该没有任何东西,以便我得到可读的句子,这就是游戏的读取方式。如何将mapdesc
转换为ASCII?
答案 0 :(得分:0)
公平地说,输出完全匹配解码输出,问题实际上与输入数据有关。
如果你仔细观察,你会注意到其他一对字符是00
,使用一些简单的启发式方法,我们可以确定这里有16位字,4个十六进制字符。
您面临的问题以及.
字符的原因是,在将其解码为UTF-8时,其他每个字符都将 null 。
您有两种解决方案可以解决这个问题:
要继续以UTF-8解码,请从字符串中删除所有其他 null 字符,所有_00_s。
或者
以UTF-16解码
如果选择此选项,您的数据仍然存在问题 - 第一个字只有8位,这将导致其他字节之间的转换;以UTF-16解码,在数据blob的开头添加一个额外的 00 (或者更快地开始循环一个位置)