【问题标题】:Reading file formatted with C in C#在 C# 中读取用 C 格式化的文件
【发布时间】:2012-06-29 10:07:03
【问题描述】:

我有一个用 C 语言编写的二进制文件,其中包含一长串数字。 首先它随后包含 4 次 int(所以前 16 个字节是 4 个 int)然后它包含双精度数(我假设每 8 个字节一个新的双精度数)。

在任何点或其他任何地方都没有空格。现在我需要用 C# 读取数据,但到目前为止我尝试的所有方法都不起作用,有什么建议吗?

【问题讨论】:

  • 你尝试了什么?
  • 对于那些不熟悉 C 的人来说,这是说它是二进制文件而不是文本文件吗?如果是这样,msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx 可能会有所帮助...具有 ReadInt32 等有用的方法...
  • 首先我尝试使用FileStream 打开文件并使用fs.Read(byte[4], 0, 4) 将前四个字节读入数组,然后使用BitConverter.ToInt32(byte[4], int) 将其转换为整数。我使用char[4]StreamReader 进行了同样的尝试,但这也没有用。
  • 理论上不应该是一个文本文件,因为它是使用 fprintf 创建的。
  • 如果数字确实打印了“%d%d%d%d%lf%lf...”(没有空格)并且它们的十进制表示的长度不同(即不同的数字数字/数字),它们很难分开。

标签: c# c file formatted


【解决方案1】:
using (BinaryReader br = new BinaryReader(File.Open("file", FileMode.Open)))
{
  int a = br.ReadInt32();
  int b = br.ReadInt32();
  int c = br.ReadInt32();
  int d = br.ReadInt32();
  double e = br.ReadDouble();
  double f = br.ReadDouble();
  ...
}

【讨论】:

  • 这适用于二进制文件,但不适用于将数字输出为文本的fprintf
  • 因为它们是文本文件。为了清楚起见,假设我给你这个文本“12345”。如果我告诉你这个文本实际上是两个整数连接在一起,你能告诉我我是连接了 12 和 345 还是 123 和 45?在这个文本文件中,数据的第一个字节是字符代码 1,第二个字节是字符代码 2,以此类推。或者根据编码,每个字符可能有两个或更多字节。但是,如果它是一个二进制文件,并且我在其中写入了整数 1 和 2345,那么前四个字节的数据将是 0x00000001,接下来的四个字节将是 0x00000929。
  • 以上评论是为了回答您的疑问,为什么这段代码不适用于使用 fprintf 创建的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多