gpt4 book ai didi

将变量转换为结构定义中定义的 union 类型

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

实际上,我在 C 中遇到一些困难,无法将 unsigned int 变量转换为在结构类型声明中声明的 union 类型。

我需要像编写结构中定义的 union 字段一样设置变量。

包含头文件中的声明:

typedef struct {
[...]

union {
unsigned long COMPLETE_VALUE;
struct {
unsigned long UPPER:16; /* [15:0] */
unsigned long LOWER:16; /* [31:16] */
} SUB_STRUCT;
} UNION;

[...]
} STRUCT_TYPE;

C 源文件中的变量:

STRUCT_TYPE *pStructure;                        /* the reference structure */
unsigned long dummyVar; /* dummy variable */

/* writing the upper field in the structure */
pStructure->UNION.SUB_STRUCT.UPPER = some_value;

问题:可以使用结构类型 STRUCT_TYPE 的内部 union 类型修改“dummyVar”的值吗?是否可以将变量转换为结构中定义的 union 并访问子结构的字段?

如果可以像下面所示或以类似的方式修改变量,那将非常有用:

((<CAST>) dummyVar).UNION.SUB_STRUCT.UPPER = some_value;

注意事项:- 不能更改 STRUCT_TYPE 的声明。- 结构 pStructure 不能写入或编辑。- pStructure 的访问行为需要复制到 dummyVar。

这在 C 中是否可行?

提前致谢!

马丁

最佳答案

It is possible to modify the value of "dummyVar" using the internal union-types of the structure-type STRUCT_TYPE?

可能不是,因为你有这个:

typedef struct {
[...]

union {

我假设 [...] 意味着那里放置了结构成员。

Is it possible to cast the variable to the union defined within the structure and accessing the field of the sub-structure?

除非它是结构的初始部分,否则它是有问题的。将 union 分解为与结构不紧密耦合的单独 typedef 可能更明智。

此外,并集使用的位字段没有标准化,您无法知道它们如何以可移植的方式最终出现在内存中。

在这里做的聪明的事情可能是忘记所有关于结构的事情并简单地做

uint32_t u32 = ...
uint16_t ms = u32 >> 16;
uint16_t ls = u32 & 0xFFFFu;

无论位域实现和字节序如何,此代码都是可移植的。

关于将变量转换为结构定义中定义的 union 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55241979/

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