我面临以下情况。我有一个这样的结构:
typedef struct
{
uint8 nibble_1 : 4;
uint8 nibble_2 : 4;
uint8 data_1;
uint8 data_2;
uint8 data_3;
} NibbleStruct;
Run Code Online (Sandbox Code Playgroud)
背景信息:它是用于 CAN 通信的 32 位消息。
在代码中我有以下内容:
...
NibbleStruct nibble_struct;
uint8 nibble_to_assign = 0U;
nibble_struct.nibble_1 = nibble_to_assign;
...
Run Code Online (Sandbox Code Playgroud)
我需要保留 GCC (gnu99) 标志-Werror=conversion,但这会给出错误消息:
file_name.c 错误:从 'uint8' 转换为 'unsigned char:4' 可能会改变其值 [-Werror=conversion]|
我尝试用类似的东西进行投射
...
nibble_struct.nibble_1 = (uint8:4) nibble_to_assign; // invalid code
...
Run Code Online (Sandbox Code Playgroud)
和
...
nibble_struct.nibble_1 = (uint8) nibble_to_assign : 4; // invalid code
...
Run Code Online (Sandbox Code Playgroud)
但对于这不能编译并不感到惊讶。
有什么方法可以将我的变量转换为结构的nibble_to_assign 半字节吗?nibble_1或者在结构体外部的代码中声明一个半字节。
c variable-assignment compiler-flags compiler-warnings nibble