如何在c++中读取未知形状的二进制文件?
How do I read a binary file of unknown shape in C++?
我有一个具有3600字节头的二进制文件,13483个跟踪(列)每个具有240字节头。我想跳过标题并将数据值读入矩阵。
我能够从文件中获得一些值,但是seismicDataNH[50][40]到seismicDataNH[50][54]应该是[13,17,12,5,19,51,29,-118,-127,-127,-50,126,126,126,-32]这不是我得到的。
我不确定我是否正确理解read(),它是否将文件读取为一长行值,还是多行?我假设一行很长,也许这就是为什么它不起作用。
下面是我用来读取文件的代码:#include <iostream>
using namespace std;
#define N_SAMP 1990
#define M_TR 13483
char tempArray [N_SAMP*M_TR];
char seismicData[1990][13483];
char seismicDataNH[1750][13483];
int main()
{
FILE*seismicFile;
seismicFile = fopen("NVGT-88-06.sgy","rb");
if (seismicFile!=NULL)
{
fseek(seismicFile, 3600*sizeof(char), SEEK_CUR);
fread(tempArray, sizeof(char), N_SAMP*M_TR, seismicFile);
puts("nnRead File successfully");
int c = 0;
for (int in=0; in<N_SAMP; in++)
{
for (int im=0; im<M_TR; im++)
{
seismicData[in][im] = tempArray[c];
c++;
}
}
puts("nStored in matrix");
// Make matrix values without header values
for (int in=240; in < N_SAMP; in++)
{
for(int im=0; im < M_TR; im++)
{
seismicDataNH[in-240][im] = seismicData[in][im];
}
}
puts("Removed header");
puts("Test values: n");
for (int it = 40; it<55; it++)
{
printf("%dn", seismicDataNH[50][it]);
}
fclose(seismicFile);
}
return 0;
}
如果有人想看一下,这里是数据文件(.sgy):https://www.dropbox.com/s/y8aa99yqhfyacc8/nvgt - 88 - 06. - sgy?dl=0 从你的描述中,有13483个连续的1990字节块(包括240个头)。
这意味着你有for循环嵌套和数组索引错误的方式。
将数组定义更改为:
char seismicData[M_TR][N_SAMP];
char seismicDataNH[M_TR][N_SAMP-240];
和两个嵌套的for循环:
for (int im=0; im<M_TR; im++)
{
for (int in=0; in<N_SAMP; in++)
{
seismicData[im][in] = tempArray[c];
c++;
}
}
职责。:
for(int im=0; im < M_TR; im++)
{
for (int in=240; in < N_SAMP; in++)
{
seismicDataNH[im][in-240] = seismicData[im][in];
}
}
保持最后的for循环(输出数据)原封不动。
这应该会给你预期的输出(对我来说就是这样)。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 如何读取二进制文件的块(未知大小)
- 如何在c++中读取未知形状的二进制文件?
- 在c#中读取未知大小的二进制文件