我有一个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。我应该如何更改我的代码以使其工作?
当你的数据是二进制时,你不需要用fprintf和fscanf转换它。你可以用fread和fwrite读写你的数组。
如果你的数据交替使用 a 和 b 记录,你将更好地以相同的方式组织你的变量:
struct ab {
int a, b;
} ab[5];
并一次性阅读所有内容
fread(ab, sizeof (int), 10, fileHandle);
然后按照您喜欢的方式处理它。
(详见 man fread, and man fwrite (