在块中释放2字节长的整数

时间:2017-09-23 22:54:32

标签: c arrays file io fread

我正在将一个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);

目标是提高绩效。

1 个答案:

答案 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事实上确实阅读了预期的项目数量。