【发布时间】:2016-05-06 21:44:01
【问题描述】:
我目前正在开发一个加密文件并将它们添加到应用程序库中的项目。我需要对文件格式进行版本化,以便我计划在加密文件中添加文件头。该项目在 Qt 中,目前用于 Windows。以后也会为android和mac做app。
为此,我制作了这些结构,即版本 1 文件。
struct Header_Meta
{
char signature [4];
char version [4];
};
struct Header_v1
{
char id [12];
char flag [8];
char name [128];
long size;
};
union File_v1
{
Header_Meta meta;
Header_v1 header;
byte null [512 - sizeof (Header_Meta) - sizeof (Header_v1)];
byte data [MAX_HEADERv1];
};
该文件是二进制文件。 现在在 getDetails() 函数中,我将读取 MAX_HEADERv1 字节到 file_v1.data 并在成员变量中获取详细信息。
我的问题是
- 有更好的方法吗?
- 在平台差异的情况下,将 Header_v1 的长大小写入文件是否有任何问题?
- 逻辑应该在所有设备中以相同的方式工作,文件来自另一个平台。这会成立吗?
【问题讨论】:
-
在不同平台上会有数据类型大小的问题吗?由于您正在将长值写入文件...
-
您还必须注意字节顺序。
-
不要忘记字段对齐 (
#pragma pack)。不要忘记字节顺序。 -
字段对齐?这是什么?
-
您确定要使用
union作为您的File_v1数据类型吗?所有成员都将存储在同一个内存位置。
标签: c++ c qt file cross-platform