gpt4 book ai didi

c - 如何使用 char 数组将位字段打包为短整数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:55 24 4
gpt4 key购买 nike

在以下2个结构中,

typedef struct _a {
short a1:13 __attribute__((packed));
char a2[4] __attribute__((packed));
} a;

typedef struct _b {
short b1:10 __attribute__((packed));
short b2:10 __attribute__((packed));
short b3:12 __attribute__((packed));
} b;

struct b中,我发现b2的位用b1打包,b3的位用b2打包。它最终产生 4 字节的值。

我期待与 struct a 类似的行为,但我没有看到相同的行为。前 2 个字节被 a1 占用(未使用的 5 位),然后是 a2 的 4 个字节。

这种行为是预期的吗?为什么我不能将 char[4] 与 short:13 一起打包?有办法实现吗?

最佳答案

a2 不是位域,因此永远不会与 a1 放在一起。标准说

Values stored in non-bit-field objects of any other object type consist of n × CHAR_BIT bits, where n is the size of an object of that type, in bytes. The value may be copied into an object of type unsigned char [n] (e.g., by memcpy); the resulting set of bytes is called the object representation of the value.

所以这样的子对象必须是一个可寻址单元,并且没有异常(exception)。

关于c - 如何使用 char 数组将位字段打包为短整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738944/

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