如何在里面用 union 定义 struct ,以便它只占用1个字节?我试图在任何地方添加__attribute__((packed))
,但它没有帮助。
以下是struct的成员:
struct
{
int blockNumber: 1 __attribute__((packed));
int shallBe1: 1 __attribute__((packed)); // should be set to 1 per ISO 14443-4
int nadFollowing: 1 __attribute__((packed)); // always 0 in our software
int cidFollowing: 1 __attribute__((packed)); // always 0 in our software
union
{
int chaining: 2 __attribute__((packed)); // i-block
int ackNak: 2 __attribute__((packed)); // r-block
int deselectOrWtx: 2 __attribute__((packed)); // s-block
} __attribute__((packed));
int blockType: 2 __attribute__((packed));
} pcb __attribute__((packed));
sizeof(pcb)返回超过1,而我需要它只占用一个字节。
以下是我测试结构大小的方法:
BYTE testpcb[sizeof(pcb) == 1 ? 0 : -1];
如果我在构建期间遇到错误,那么struct不是1个字节。
答案 0 :(得分:1)
每个编译器对位域的处理方式都不同,并非所有编译器都有明确定义的方法来控制如何打包位域。使用位域时,获取结构偏移量以便按照您想要的方式进行打包可能很困难,而且有时只是直接进行。
如果我是你,我会把它视为u8并在需要时适当掩盖。这是非理想的,但根据我的经验,你在这里使用的是什么。