用C ++读取数据

时间:2016-10-28 16:52:33

标签: c++ matlab

我正在使用matlab代码来读取二进制数据:

**nfft    = 256; 
navg    = 1024;
nsamps  = navg * nfft;
f_s     = 8e6;
nblocks = floor(10 / (nsamps / f_s));  

for i = 1:nblocks 
    nstart  = 1 + (i - 1) * nsamps;

    fid     = fopen('data.dat');   % binary data and 320 MB

    fseek(fid,4 * nstart,'bof');

    y       = fread(fid,[2,nsamps],'short');

    x       = complex(y(1,:),y(2,:));

end**

它会给我复杂的数据,长度可达8e6。

我正在尝试编写C ++来执行与matab相同的功能,但我无法获取所有数据或者它们不是同一个原始数据。

任何人都可以帮助理想吗?

这是我正在处理的C ++代码。

非常感谢你。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <complex>
#include <vector>
#include <stdlib.h>


 struct myfunc{
    char* name;
 };

int main() {
              FILE* r = fopen("data.bin", "rb");

              fread( w, sizeof(int), 30, r);

              fread(&c, sizeof(myfunc),1,r);

              for(int i=0; i < 30; i++){

                  cout<< i << ".  " << w[i] << endl;
              }
return 0;

}

1 个答案:

答案 0 :(得分:0)

基于评论

  

c我从struct myfunc调用,w是向量。所以它们将是:int w [40]; myfunc c;

fread(&c, sizeof(myfunc),1,r);

将从文件流r中读取一个指针的数据到c。这不会特别有用,因为在写入文件时指向的任何地址myfunc.name在读回文件时几乎肯定无效。

解决方案:在写入文件时序列化myfunc.name并在读取时反序列化它。信息不足是建议如何最好地做到这一点。我会存储字符串Pascal样式并加上myfunc.name的长度,以便更容易阅读它:

int len = strlen(myfunc.name);
fwrite(&len, sizeof(len), 1, outfile); // write length
fwrite(myfunc.name, len, 1, outfile); // write string

并阅读

int len;
fread(&len, sizeof(len), 1, infile); // read length
myfunc.name = new char[len+1]; // size string with space for terminator
fwrite(myfunc.name, len, 1, infile); // read string
myfunc.name[len] = '\0'; // terminate string

请注意,上面的代码完全忽略了endian和错误处理。