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

标签 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。我应该如何更改代码才能使其正常工作?

最佳答案

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

如果您的数据交替使用 a 和 b 记录,您最好以相同的方式组织变量:

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

并使用 一次性阅读全部内容

fread(ab, sizeof (int), 10, fileHandle);

然后按照你喜欢的方式处理它。

(有关详细信息,请参阅 man fread 和 man fwrite)

关于c - 如何在C中读取二进制文件并保存到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455656/

相关文章:

javascript - 如果索引大于 arr 长度,它应该再次返回

java - 如果 char 数组是 Java 中的 Object,为什么打印它不显示其哈希码?

java - 为什么 new File(File Parent, String childName) 表现不明显?

c - 如何使用共享内存共享 char ** 变量

C程序在最后一次输入后立即崩溃

c - 执行返回 255

不能在幂函数中使用常数

arrays - as3 URLRequest声音存储在数组中吗?

python - codecs.open 在特定路径Python中创建txt文件

c++ - 将文本文件中的数据存储到 C++ 中以便编辑的最佳方法是什么