【问题标题】:Reading a binary file containing arrays in C or Mathematica在 C 或 Mathematica 中读取包含数组的二进制文件
【发布时间】:2014-01-26 04:34:23
【问题描述】:

我收到了一个二进制文件,我需要阅读其中的一部分。文件格式向我描述为:

第 1 行:N 行

第 2 行:xarray1,yarray1

第 2 行:xarray2,yarray2

第二行:xarray3,yarray3

第 2 行:xarray4,yarray4

第 2 行:xarray5,yarray5

第 2 行:xarray6,yarray6

第 6 行:xarray7,yarray7

其中 NLine 是一个整数(具体为 499),每个 xarray 和 yarray 都是一个长度为 NLine 的浮点数组。我实际上只真正关心 xarray7 和 yarray7,但我很高兴为此目的将它们全部读入数组,而不是使用其他的。无论如何,我只需要将数组转换为 ascii 格式,这样我就可以用它们做其他事情,或者甚至只是将它们转换为我可以在本地处理并打印出来的数组。我很高兴在 C 或 Mathematica 中做到这一点。

很遗憾,我无法提供数据本身或类似文件的示例 - 以上就是我所知道的全部内容。如果有人能提供一些代码让我进入我的文件(或者告诉我文件不可能是这种确切的格式或其他东西),那将不胜感激。

谢谢!

【问题讨论】:

  • 二进制文件如何包含行?
  • 不知道。给我发文件的人可能完全错了。我只是转发他们发给我的信息。我通常不处理二进制文件,所以我不知道约束是什么。
  • 嗯,您打开文件查看其内容了吗?读取包含浮点数的二进制文件可能会很棘手,因为跨平台的浮点数和整数格式不同
  • 二进制文件通常不使用回车换行。它们通常由特定于应用程序的格式(或一些通用二进制格式)组成。我们将需要知道二进制文件的格式——即,什么二进制值将不同的行/记录和数组分开......可能还有数字的格式!,这不是我们真正能猜到的。如果它是您在示例中编写的纯文本,那么它是完全不同的......
  • 不知道怎么看文件的内容。它是二进制的,所以除非我能把它读成什么东西,否则我看不到里面有什么。

标签: c arrays binary wolfram-mathematica


【解决方案1】:

好的,只是为了让你继续......

FILE* binFile = fopen("./path/filename.bin", "rb"); //open as binary 'b' for reading 'r'
char nextByte; // to store one byte in

// Loop through the whole file
while (!feof(binFile))
{
    // read one byte, with a size of 1 byte (could use sizeof(char) here), count of 1 from binFile, store in nextByte...
    fread(nextByte, 1, 1, binFile);

    // Print the byte
    printf("%02x ", nextByte);
}

// Close the file
fclose(binFile);

完成此操作后,它将以十六进制数字打印出二进制文件(每个值一个字节)。然后你可以分析格式。 注意:我没有测试此代码...您还需要包含相关的 c 库...

【讨论】:

  • 谢谢。这不太奏效(段错误),但它帮助我找出答案。看起来(经过一堆试验和错误)数据格式是一个 int 然后 10 次迭代 499 个浮点数,并且通过使用此代码作为起点,我能够使用 fread(&nlines,sizeof(int),1,binfile) 读取 int 然后所有紧随其后的是fread(&elem,sizeof(float),1,binfile),其中nlines 被定义为int,elem 被定义为float。
  • 哦,是的......你的意思是把一个指针传递给 fread 函数,这可能是 seg 错误,抱歉我错过了那个:o
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多