我正在使用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读取它,就可以了,而且数组中的所有数字都是正确的。
我真的不知道发生了什么。