我最近使用C/C++加载了很多二进制文件,我被它是多么的不优雅所困扰。要么我得到了很多看起来像这样的代码(我已经离开了):
uint32_t type, k;
uint32_t *variable;
FILE *f;
if (!fread(&type, 4, 1, f))
goto boundsError;
if (!fread(&k, 4, 1, f))
goto boundsError;
variable = malloc(4 * k);
if (!fread(variable, 4 * k, 1, f))
goto boundsError;或者,我定义了一个本地的压缩结构,这样我就可以更容易地读取固定大小的块。然而,在我看来,对于这样一个简单的问题-即将指定的文件读入内存-可以更有效、更具可读性的方式完成。有没有人有什么小窍门/窍门?我想澄清的是,我不是在寻找一个库或其他东西来处理这个问题;如果我正在设计自己的文件,并且必须对文件规范进行大量更改,我可能会受到诱惑,但现在我只是在寻找风格上的答案。
此外,你们中的一些人可能会建议mmap-I喜欢mmap!我经常使用它,但它的问题是它导致了处理未对齐数据类型的讨厌代码,这在使用stdio时并不真正存在。最后,我将编写类似于stdio的包装器函数,以便从内存中读取数据。
谢谢!
编辑:我还应该澄清我不能改变文件格式--有一个我必须读取的二进制文件;我不能请求另一种格式的数据。
发布于 2010-11-14 09:54:48
您可能对protocol buffers和其他IDL方案感兴趣。
https://stackoverflow.com/questions/4175754
复制相似问题