gpt4 book ai didi

c++ - 引用结构大小的更好方法(#pragma pack VS 定义的大小)

转载 作者:行者123 更新时间:2023-11-30 04:36:25 24 4
gpt4 key购买 nike

假设我有结构 Foo

struct Foo{
int a;
short b;
char c;
};

而且我必须将这个结构写入 n/w 缓冲区。我需要知道这个结构的大小。在我的环境中,sizeof(Foo) 返回 8,没关系,我明白了。

有两种方法可以确定我要写入缓冲区的确切大小

1.#define SIZEOF_FOO 7,并用它代替sizeof(Foo)
2. 通过使用 #pragma pack 所以我可以使用 sizeof(Foo) 它将返回 7

哪种方法更好,或者还有其他方法吗?

最佳答案

如果您需要将这样的结构写入网络,请使用协议(protocol)框架或使用您定义的独立于结构布局的协议(protocol)显式编码数据。

依赖于结构的二进制布局细节可能会导致麻烦。

我听说过关于 Google Protocol Buffers 的好消息和 Boost serialization ,但我也没用过。

我已经处理了文档中定义的协议(protocol),并使用自定义编码(marshal)处理例程根据该协议(protocol)输出数据,或者使用 IDL 描述(有点像用于驱动代码生成器的带注释的 C 结构用于创建序列化/反序列化例程)。

这样您(或协议(protocol)框架)就可以控制填充的使用,而不管编译器对结构做了什么。请注意,如果您使用协议(protocol)框架,您通常需要在两端使用它(例如,如果另一个节点不受您的控制或框架不支持的嵌入式设备,这可能是一个问题)。

关于c++ - 引用结构大小的更好方法(#pragma pack VS 定义的大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633000/

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