gpt4 book ai didi

c - 数组采用 union 结构的大小

转载 作者:行者123 更新时间:2023-12-02 01:04:57 25 4
gpt4 key购买 nike

我在一个项目中有一个 union 代表 USB 游戏杆报告:

union {
struct{
uint8_t xaxis;
uint8_t yaxis;
uint8_t xraxis;
uint8_t yraxis;
uint8_t zraxis;
uint8_t slider;

uint8_t buttons8;
uint8_t buttons16;
};
uchar buffer[8];
} report;

通过这种方式,我可以轻松地将值放入结构成员并使用缓冲区成员通过 USB 发送该数据,但是我最终为不同的项目(轴上的不同分辨率,更多/更少按钮等)修改了这个 union ,然后我必须弄清楚结构的新大小是多少才能声明具有相同大小的数组。

有没有办法自动使数组大小相同?我想用 sizeof这需要我像这样更改结构:
union {
struct _data{ // either this
uint8_t xaxis;
uint8_t yaxis;
uint8_t xraxis;
uint8_t yraxis;
uint8_t zraxis;
uint8_t slider;

uint8_t buttons8;
uint8_t buttons16;
} data; // or this
uchar buffer[8];
} report;

但后来我不能再像这样将数据放入结构中:
report.xaxis = value;

但反而:
report.data.xaxis = value;

我不想要的。

有没有办法干净地做到这一点?

最佳答案

您可以使用 offsetof()为此使用结构中的最后一个元素

union
{
struct data
{
uint8_t xaxis;
uint8_t yaxis;
uint8_t xraxis;
uint8_t yraxis;
uint8_t zraxis;
uint8_t slider;

uint8_t buttons8;
uint8_t buttons16;
};
uint8_t buffer[offsetof(struct data, buttons16)+1];
} report;

关于c - 数组采用 union 结构的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48317843/

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