如何读取二进制文件并保存到C中的数组?

时间:2018-01-26 04:06:08

标签: c arrays file binary

我有一个csv格式的文件,如下所示:

0.0060862,0.31869
0.025889,0.21183
0.064364,0.094135
0.10712,-0.0081176
0.15062,-0.073904

我想将第一列加载到数组a,将第二列加载到数组b。这就是代码的样子:

double a[5];
double b[5];
int i=0;
FILE* fileHandle = NULL;
fopen_s(&fileHandle, fileName.csv, "r+");
for(i=0;i<5;i++)
{
 fscanf_s(fileHandle,"%lf,%lf",a[i],b[i]);
}
fclose(fileHandle);

现在我将csv文件转换为二进制文件;数据以unsigned int中的2的补码表示。我该如何更改代码? 我将代码更改为

unsigned x[5];
unsigned y[5];
double a[5];
double b[5];
int i=0;
FILE* fileHandle = NULL;
fopen_s(&fileHandle, fileName.csv, "rb+");
for(i=0;i<5;i++)
{
 fscanf_s(fileHandle,"%u,%u",x[i],y[i]);
 a[i] = x[i]/(2^15);
 b[i] = y[i]/(2^15);
}
fclose(fileHandle);

但是从二进制文件中读取的x[i]y[i]始终是3435973836.我应该如何更改代码才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

当您的数据是二进制时,您不需要使用fprintf和fscanf进行转换。 你可以用fread和fwrite读取和写入数组。

如果您的数据交替显示a和b记录,您将以相同的方式更好地组织变量:

struct ab {
     int a, b;
     } ab[5];

并使用

一次性阅读
fread(ab, sizeof (int), 10, fileHandle);

然后按自己喜欢的方式处理。

(参见man fread,man fwrite了解详情)