我正在尝试像这样制作一串十六进制
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/