【发布时间】:2017-08-28 23:00:33
【问题描述】:
我正在尝试制作一个像
这样的十六进制字符串4100200062006/6006/66006/60063006/6006/6006/6006/60063006/6006/60063006/6006/600630063006/6006/6006/600630063006/600630063006 5006 000/7006006 50063006 $$ >>>>>>>>>>>>>>>>>>>
转成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 中的另一面读取看起来像
A. 。空白的。 。帆布。 。推荐的。 。为了。 。锻造。 .e.d.i.t.i.n.g. .o.n.l.y
十六进制视图中的点是00s,所以我相信对于 ASCII 格式,它们应该什么都不是,以便我得到可读的句子,这就是游戏读取它的方式。我需要做什么才能将mapdesc 转换为 ASCII?
【问题讨论】:
-
C# hex to ascii的可能重复
-
数据看起来像 UTF16(大端)。您应该能够使用
StreamReader对象直接读取它,唯一可能复杂的是需要在构造函数中指定Encoding.BigEndianUnicode。应该不需要将二进制转换为十六进制,然后再转换回其他数字或文本格式。 -
哇,好吧,我完全理解你。我不知道为什么我把它变成十六进制然后回到文本。我不认为 StreamReader 在这种情况下实际上可以工作。我会尝试一下,看看会发生什么。
-
从其他人发现的情况来看,您似乎开始
for循环一个字节太远了。即使在切换到流式阅读器后,我也觉得你想从0x1C1-4开始,而不是0x1C1。 -
没有文本,只有编码文本。当您阅读文本时,您必须使用编写它的编码。 .NET 的基类库很好地支持了这一点。首先,找到这种文件格式的规范,看看它使用的是哪种编码。
标签: c#