gpt4 book ai didi

c# - 十六进制转换为 ASCII 的行

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:36 25 4
gpt4 key购买 nike

我正在尝试制作一串像

这样的十六进制字符串

4100200062006C0061006E006B002000630061006E0076006100730020007200650063006F006D006D0065006E00640065006400200066006F007200200046006F007200670065002000650064006900740069006E00670020006F006E006C0079002E

转换成 ASCII 看起来像:

A blank canvas recommended for Forge editing only.

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

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. .c.a.n.v.a.s. .r.e.c.o.m.m.e.n.d.e.d. .f.o.r. .F.o.r.g.e. .e.d.i.t.i.n.g. .o.n.l.y

在十六进制 View 中,这些点是 00,所以我相信对于 ASCII 格式,它们应该什么都不是,这样我就能得到可读的句子,这就是游戏读取它的方式。我需要做什么才能将 mapdesc 转换为 ASCII?

最佳答案

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

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

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

你有两个解决方案来解决这个问题:

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

或者

以 UTF-16 解码

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com