gpt4 book ai didi

c - 对 union 数据的原始访问

转载 作者:行者123 更新时间:2023-11-30 14:46:56 24 4
gpt4 key购买 nike

在许多情况下,我发现我希望能够访问 union 的原始数据,但我不想计算大小或者我想保持灵 active 。

例如(有点人为,但我希望它传达了这个想法),如果我改变 othertype_t 的样子,我不想调整 raw 的大小:

#pragma pack(push, 1)
typedef union {
uint8_t raw[0];
struct {
uint8_t bar[32];
othertype_t foo[4];
};
} sometype_t;
#pragma pack(pop)

稍后我可以执行诸如 sizeof(union sometype_t) 之类的操作来了解 raw 的大小。

使用 raw[0] 可以工作,但我知道这是一个 gcc 非标准扩展。我怎样才能以更便携的方式做到这一点?

作为一种“技巧”,我可以做类似 raw[1] 的事情,但感觉有点误导。

更新:有人指出这是 C++ 中未定义的行为。您能否提供一些关于此的额外信息?

最佳答案

也许

typedef union 
{
struct _struct
{
uint8_t bar[32];
othertype_t foo[4];
};
uint8_t raw[sizeof(struct _struct)];
} sometype_t;

关于c - 对 union 数据的原始访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51799851/

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