我宣称自己是一个位域(u8意味着未记忆的整数8)
typedef struct build_field{
u8 build : 5;
u8 ability : 1;
u8 hability : 1;
u8 shinyness : 1;
} build_field;
现在我想要转换函数返回的传入u8值,这样我就可以将它用作位域。
build_field f = (build_field) func_that_returns_u8();
此外,我想将其转换为u8值。
u8 x = (u8) field;
但我的C编译器不会让我做任何操作。知道如何解决问题吗?
答案 0 :(得分:4)
使用联盟:
union myunion
{
u8 value;
build_field field;
};
union myunion m;
m.value = func_that_returns_u8();
u8 a = m.ability;
确保结构build_field
中的成员之间没有填充,否则这将无效。
更明智的选择是从整数中提取位。让我们说值中的位与结构中的成员的顺序相同。要获得hability
和ability
的值,请执行以下操作:
u8 value = func_that_returns_u8();
build_field f = { 0 };
f.hability = ( ( unsigned int )value >> 6U ) & 1U;
f.ability = ( ( unsigned int )value >> 5U ) & 1U;