将结构类型转换为整数时出错

Pra*_*att 2 c casting

我收到了错误

 error: aggregate value used where an integer was expected
Run Code Online (Sandbox Code Playgroud)

在编译此代码时:

#include <stdio.h>
typedef unsigned long U32; 
typedef struct hello_s
{
  U32   a:8;
  U32   b:24;
}hello_t;

int main()
{
  hello_t str;
  U32 var;

  str.a = 0xAA;
  str.b = 0xAAA;
  var = (U32)str;
  printf("var : %lX\n", var);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释错误的含义,以及我做错了什么.

编辑:我知道这是一个愚蠢的事情.我想知道的是为什么编译器会为此而哭泣.为什么它只能将前32位分配给整数.

oua*_*uah 5

var = (U32)str;
Run Code Online (Sandbox Code Playgroud)

因为str是结构类型的对象而您无法将结构对象转换为算术类型的对象.C不允许您执行此类转换.

如果要将结构对象作为整数访问,可以创建结构和结构的并集U32.

请注意,公共构造var = *(U32 *) str;在C中是未定义的行为.它违反了别名和对齐规则.