fread/fwrite 在 C 中
fread/fwrite in C
假设我有这些参数:
bool array_serialize(const void *src_data,
const char *dst_file,
const size_t elem_size,
const size_t elem_count);
假设 src_data
是我要写入 dst_file
的数组。
我不太明白如何使用 fwrite
。我知道 fwrite
需要四个参数:
ptr
- 这是指向要写入的元素数组的指针。
size
- 这是要写入的每个元素的字节大小。
nmemb
- 这是元素的数量,每个元素的大小为 size 字节。
stream
- 这是指向指定输出流的FILE
对象的指针。
但我 运行 遇到的问题是 *dst_file
是 const char
类型。如何将其转换为能够使用 fwrite
的适当类型?
我试过
fwrite(src_data, elem_size, elem_count, dst_file);
但显然这是不正确的。
fread
也有类似问题。
首先阅读参考 两次:fwrite() and fread()。
最后一个参数应该是一个文件指针,所以这样做:
fp = fopen(dst_file, "w+");
if(fp != NULL) {
fwrite(src_data, elem_size, elem_count, fp);
rewind(fp);
fread(result_data, elem_size, elem_count, fp);
}
看看more examples。
const char 实际上是一种字节类型,您可以将其转换为您想要的任何类型。
如果您有一个以已知模式存储的二进制文件(最好),您可以按成员大小将类型读入目标结构。
例如,如果您有一个包含两个变量的结构
struct foo {
int f1;
int f2;
};
而且你知道整个文件都是由这些组成的,那么你可以像这样从文件中读取值
fread(&target, sizeof(foo), num_elems, fp)
您可以根据您正在阅读或写入的文件冲洗并重复此操作。
此外,您可以将文件结构化为 headers,它会告诉您存储的数据类型以及其中的数量,这允许您在单个文件中拥有可变结构。
假设我有这些参数:
bool array_serialize(const void *src_data,
const char *dst_file,
const size_t elem_size,
const size_t elem_count);
假设 src_data
是我要写入 dst_file
的数组。
我不太明白如何使用 fwrite
。我知道 fwrite
需要四个参数:
ptr
- 这是指向要写入的元素数组的指针。size
- 这是要写入的每个元素的字节大小。nmemb
- 这是元素的数量,每个元素的大小为 size 字节。stream
- 这是指向指定输出流的FILE
对象的指针。
但我 运行 遇到的问题是 *dst_file
是 const char
类型。如何将其转换为能够使用 fwrite
的适当类型?
我试过
fwrite(src_data, elem_size, elem_count, dst_file);
但显然这是不正确的。
fread
也有类似问题。
首先阅读参考 两次:fwrite() and fread()。
最后一个参数应该是一个文件指针,所以这样做:
fp = fopen(dst_file, "w+");
if(fp != NULL) {
fwrite(src_data, elem_size, elem_count, fp);
rewind(fp);
fread(result_data, elem_size, elem_count, fp);
}
看看more examples。
const char 实际上是一种字节类型,您可以将其转换为您想要的任何类型。 如果您有一个以已知模式存储的二进制文件(最好),您可以按成员大小将类型读入目标结构。
例如,如果您有一个包含两个变量的结构
struct foo {
int f1;
int f2;
};
而且你知道整个文件都是由这些组成的,那么你可以像这样从文件中读取值
fread(&target, sizeof(foo), num_elems, fp)
您可以根据您正在阅读或写入的文件冲洗并重复此操作。
此外,您可以将文件结构化为 headers,它会告诉您存储的数据类型以及其中的数量,这允许您在单个文件中拥有可变结构。