如何准确地在 byte[] C# 中获取 ASCII 内容?[已结束]

How to get ASCII content exactly in byte[] C#? [closed]

提问人:Headshot 提问时间:6/4/2023 更新时间:6/4/2023 访问量:53

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

6个月前关闭。

我发现了很多关于从 byte[] 数组读取内容问题的文章、参考链接,但大多数文章都没有正确解码内容。有没有办法正确解码它们的内容?例如,我有 byte[] 数组,当转换为 ASCII 时,它们看起来不像预期的结果。

    byte[] raw_data = new byte[] { 0, 0, 0, 12, 0, 0, 129, 13, 0, 0, 0, 0, 5, 80, 1, 0 };
    Console.WriteLine(BitConverter.ToString(raw_data));
    Console.WriteLine(Encoding.UTF8.GetString(raw_data, 0, raw_data.Length));
    Console.WriteLine(Encoding.ASCII.GetString(raw_data, 0, raw_data.Length));

结果看起来非常模棱两可。

enter image description here

此外,我已经使用在线转换器查看结果,但它也不好,看不到它的正确值。

enter image description here

任何想法,给我一些建议。我从那里得到参考 ASCII 表。enter image description here

同时,我拥有的 byte[] 数组,可能是像这样的值。

S1F13
<L
>.
C# UTF-8 十六进制 字节 ASCII

评论

0赞 shingo 6/4/2023
数据是如何编码的?
0赞 Sweeper 6/4/2023
您是否期望您的字节数组解码为“S1F13”、“<L”和“>.”?你为什么会这样?
0赞 Headshot 6/4/2023
@shingo我只能从客户端获取 byte[] 数组值。但我知道一件事,byte[6] 和 byte[7],它将是 S1F13,使用这个编码_stream = "S" + (Convert.ToInt16(data[6]) - 128).ToString() + "F" + data[7].ToString();
0赞 Headshot 6/4/2023
@Sweeper 是的,我预料到了这一点,因为我只能从传入的客户端接收 byte[] 数组。我得到它的长度为 16,我知道其中一些是 byte[6] 和 byte[7] 组合,我们有 S1F13,使用以下算法。我还试图弄清楚或破译其他值。_stream = "S" + (Convert.ToInt16(data[6]) - 128).ToString() + "F" + data[7].ToString();
2赞 shingo 6/4/2023
你展示的是解码过程,如果你不知道原始数据是如何编码的,为什么你认为字节数组包含ASCII内容?

答:

1赞 Florian Herzog 6/4/2023 #1

与许多评论一样,我怀疑编码出了问题。如果您查找 ASCII 表的十六进制列上的字符,您会看到(或十六进制)是唯一映射到字母数字字符(即 )。这是一个暗示,你正在解码它。8050P

既然你已经有一个工具来转换你的数据,也许将你的字节数组与该工具将产生的结果进行比较,以获得你的预期结果?