说我有类似以下的结构
typedef struct {
char field1: 4,
char field2: 4
} MyStruct_t;
现在,有一个声明为
的大型数据缓冲区 char BigBuffer[2048]
我想使用上面定义的结构初始化数组的部分,我该怎么做?
char BigBuffer[2048] = {
[10] = (MyStruct_t)(.field1 = 5, field2 = 7),
[20] = (MyStruct_t)(.field1 = 7, field2 = 4),
[200] = (MyStruct_t)(.field1 = 1, field2 = 9) }
这可能或类似吗?
我已经有了一个不同的解决方案,使用#define进行掩蔽和移动,
char BigBuffer[2048] = {
[10] = (5 & 0xf) << 4 | (7 & 0xf),
[20] = (7 & 0xf) << 4 | (4 & 0xf),
[200] = (1 & 0xf) << 4 | (9 & 0xf) }
作为一个注释,我知道除非使用指令指定,否则结构中的位字段的打包将留给编译器。只是试图证明意图。谢谢!
答案 0 :(得分:1)
不确定我的问题是否正确,但我仍然认为(5 & 0xf) << 4 | (7 & 0xf)
更优雅。
#include <stdio.h>
typedef struct{
char field1:4;
char field2:4;
}MyStruct_t;
int main(){
char b[2] = {
[0] = *(char*)&(MyStruct_t){.field1 = 5, .field2 = 7},
[1] = *(char*)&(MyStruct_t){.field1 = 7, .field2 = 4}
};
printf("%02x %02x\n", b[0], b[1]);
return 0;
}