【问题标题】:How to read a binary field within a text file如何读取文本文件中的二进制字段
【发布时间】:2025-11-28 23:40:01
【问题描述】:

我有一个固定宽度的文本文件,我现在正在使用 streamreader/readline() 来读取它。

当我在记事本++中打开时,有一个字段看起来像这样

[NUL][NUL][NUL][SUB]

其他都是普通文本。我知道这个字段是 4 个字符,代表一个计数,所以应该看起来像这样 '0001'

如何读取并转换为 '0001'

【问题讨论】:

  • .Net 中有BinaryReader

标签: c# binary streamreader


【解决方案1】:

我不确定“SUB”对应的是什么 - 但如果它读作 U+0001,您可以随时使用:

for (int i = 0; i < 4; i++) {
    chars[i + index] = (int) chars[i + index] + '0';
}

(假设您有一个名为charschar[],4 个字节从index 开始。)

首先要检查的是您是否真正正确地阅读了这些字符。坦率地说,有一个带有二进制数据的“文本”文件开始有点狡猾,但如果它只有字节 0-9,那么在 大多数 编码中,我希望它对应于 U+ 0000 到 U+0009。

【讨论】:

  • +1 我认为它可能是一个包含一些可读文本的二进制文件。
  • 现在我正在通过对我的 line.readLine() 执行 line.substrings 来提取信息。您的意思是我应该在应用上述内容之前将这 4 个字符转换为 char[] 吗?
  • 哦,我试了一下,现在输出 0000、000J 和 0009。当所有 4 个都是 NUL 时输出 0000,我认为这是正确的,但我认为 J 和 9 不正确,这就是我得到的地方notepad++中的SUB和SOH
  • 看起来它适用于 0001,0002,只是其他一些没有任何意义的 9 和 J。我不确定是因为数据不好,还是因为数据不同。 :|
  • @muddy:我认为您应该在二进制文件编辑器中查看此内容,以便您准确知道存在哪些字节。