c++ - 使用不填充的类在 C++ 中读取二进制数据的最佳方法

标签 c++ class padding

我正在读取简单的二进制数据,没有指针,使用 C++ 类,没有填充以下代码:

#include <fstream>
#include <iostream>

using namespace std;

class Data {
    public:
    int a;
    int b;
    short int c;
    double d;
}__attribute__((packed));

int main() {
    Data myData;      
    ifstream ifs("test.bin", ios::binary);
    ifs.read((char *)&myData, sizeof(myData));
    ifs.close();
}

我使用这种方法是因为数据可能有 20 多种不同的格式,我想编写 20 多种不同的类来涵盖所有可能出现的格式。我还读到其他选项包括使用位域、pragma 指令,甚至是 boost 序列化例程(我不能,因为我必须使用 std)。我的问题是:这是使用无填充类读取简单二进制数据的最佳方式吗?您是否建议任何其他替代方法?我想了解目前最安全和使用最广泛的方法是什么。

最佳答案

通常,人们会使用 struct 而不是 class,但是是的,相同的概念适用于两者。

关于c++ - 使用不填充的类在 C++ 中读取二进制数据的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691605/

相关文章:

c++ - clang-tidy:当容器包含特定类时发出警告

html - 填充不会填充 <li> 和 <div> interly

html - 是否有 css 文本重置?

java - 创建任务[]任务数组

sql事务多个类vb.net

css - 响应式网站文本对齐问题

c++ - double 会在算术表达式中隐式转换为 unsigned int 吗?

java - ECDH 共享 key 在 Crypto++ 和 Android 之间不匹配

c++ - QMetaEnum 和强类型枚举

java - 实现接口(interface)时使用额外的方法