我正在将一个2字节长的整数文件读入一个数组
FILE *f = fopen("file.bin", "rb");
int *arr;
int len = 2;
这有效:
// method 1
for (int i = 0; i < numberOfElements; i++)
fread(arr + i, len, 1, f);
我希望它的工作方式相同:
// method 2
fread(arr, len, numberOfElements, f);
目标是提高绩效。
答案 0 :(得分:1)
如果您正在读取一堆2字节的整数,则需要将它们读入一个2字节的整数数组。最直接的方法是使用int16_t
中的标准类型<stdint.h>
。你会想要这样的东西:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
FILE *f = fopen("file.bin", "rb");
int16_t *arr;
int len = 2;
assert(sizeof(*arr) == len);
arr = malloc(numberOfElements * len);
if(arr == NULL) {
fprintf(stderr, "malloc failed\n");
exit(1);
}
int r = fread(arr, len, numberOfElements, f);
if(r != numberOfElements) {
fprintf(stderr, "incorrect number of items read\n");
exit(1);
}
您会注意到我添加了代码以分配arr
,检查malloc
是否成功,检查我们选择的类型是否与len
匹配,并检查fread
事实上确实阅读了预期的项目数量。