gpt4 book ai didi

c - 在 block 中读取 2 字节长的整数

转载 作者:行者123 更新时间:2023-11-30 14:54:58 25 4
gpt4 key购买 nike

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

目标是提高性能。

最佳答案

如果您正在读取一堆 2 字节 int,则需要将它们读入 2 字节 int 数组。最直接的方法是使用标准类型 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事实上确实读取了预期的项目数量。

关于c - 在 block 中读取 2 字节长的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com