从二进制文件读取浮点向量的怪异行为

时间:2019-07-17 17:57:37

标签: c arrays fopen binaryfiles fread

我正在使用python将float32数组放入二进制文件中以在C中对其进行分析。为此,我正在使用以下python代码:

'''python
import numpy as np
import matplotlib.pyplot as plt

N=500

signal=np.arange(0,N)


#generating binary array
myarr=np.array(signal, dtype='float32')
myarr=myarr.tobytes(order='C')

#creating file.bin
with open('file.bin', 'wb') as f:
    f.write(myarr)

#recovering the data
with open('file.bin', 'rb') as f:
    recAr=f.read()

recAr=np.frombuffer(recAr, dtype='float32')
print(recAr.size)

plt.figure()
plt.plot(signal)
plt.show()
'''

然后我使用以下代码在C中阅读它:

#include<stdio.h>
#include<stdlib.h>


//Read a float vector from a binary file
float * readVector(int v_size, char file_name[]){
  float *my_floats=(float*)malloc(sizeof(float)*v_size);
  //opening file
  FILE *file_to_read = fopen(file_name, "r");

  if (file_to_read == NULL){
    printf("File would not open!\n");
  }
  //read binary
  //size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
  fread(my_floats, sizeof(my_floats[0]), v_size, file_to_read);

  fclose(file_to_read);

  return my_floats;
}

int main(void){

  int v_size=500;
  float *array=readVector(v_size, "file.bin");

  for(int i=0; i<v_size;i++)
    printf("%d - %f\n", i, array[i]);
  return 0;
}

但是我得到的真是奇怪。对于较小的数组,一切正常,如果N = 50,则表示一切正常,但如果较大,如500,则可以读取前100项,然后其他所有都出错,大多数都被读取了为0.000。如果信号中的数据不同(例如正弦波),则我可以读取更少的有效数字。另一方面,如果我用python读取它,就可以了,而且数组中的所有数字都是正确的。

我真的不知道发生了什么。

0 个答案:

没有答案