gpt4 book ai didi

c - 将数据写入文本或二进制的单个 C 函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:51 25 4
gpt4 key购买 nike

我有一个 C 函数,可以将一些数据写入文本文件。数据由 float 、整数和字符串组成。它看起来像这样:

writeAsTextFile(  mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName);

为此,我调用了 fprintf;

现在我想以二进制形式写入相同的数据。我可以编写第二个函数 writeAsBinaryFile 并改用对 fwrite 的调用。但是每次我要更改 mystruct_t 的设计时,我都必须同时修改 writeAsTextFile 和 writeAsBinaryFile。当然还有相应的 readAsTextFile 和 readAsBinaryFile。最重要的是,这将增加代码大小。因此,我想要一个带有一个 bin-or-text 参数的单一通用函数,如下所示:

writeToFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName, myEnumType_t eOption)

例如,其中选项将是枚举 eBin = 0 和 eTxt =1。根据 eOption,该函数将写入二进制或文本数据。

我不确定实现此目标的最佳方法是什么。我是否也应该使用 fwrite 来编写文本,我应该尝试使用宏吗? (我在某处看到过 ## 指令的使用,但从未使用过它),或者在我需要写入文件的任何地方使用 switch/ifs 语句?或者我应该写一个通用函数myWriteFunction(void *data, char const type, myEnumType_t eOption)

writeToFile 会调用它吗?

我对使用 fread/fwrite 和宏不是很熟悉,所以欢迎任何最佳实践评论、想法等,

谢谢

爸爸

最佳答案

您可以创建几个函数来在您的 struct 中写入各种类型的数据:

writeInt(File *f, myEnumType_t eOption, int data);
writeFloat(File *f, myEnumType_t eOption, float data);
writeFloatArray(File *f, myEnumType_t eOption, float *data, size_t n_data);

.. 然后二进制或文本测试隐藏在每一个中。您的主要结构编写函数看起来像(省略了错误检查):

writeToFile(mystruct_t *myStruct, const char *fileName, myEnumType_t eOption)
{
const char *fmode = eOption == EOPT_BIN ? "wb" : "w";
FILE *f = fopen(filename, fmode);

writeInt(f, eOption, myStruct->a);
writeInt(f, eOption, myStruct->b);
writeFloatArray(f, eOption, myStruct->values, myStruct->n_values);
/* ... */
}

所以结构布局的改变只需要改变一个地方。

您还可以为不同的应用程序级“类型”实现不同的写入函数 - 例如,writeTemperature() 可能不同于通用的 writeFloat()

关于c - 将数据写入文本或二进制的单个 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843957/

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