我想分配一些内存,将其初始化为一些值,然后将此内存的不同部分转换为不同的结构。东西如下:将内存投射到工会
union structA{
__int8 mem[3];
struct{
unsigned field1 : 8;
unsigned field2 : 12;
unsigned field3 : 4;
};
};
struct structB{
__int8 mem[10];
};
__int8 globalMem[128];
structA a1 <---- &globalMem[0]
structA a2 <---- &globalMem[10]
structB b1 <---- &globalMem[30]
我尝试使用reinterpret_cast的,我没有得到任何编译器错误,但似乎我的变量(a1
,a2
和b1
)并没有真正分配/正确初始化。
任何有关为什么这不起作用的想法和什么是实现这样的事情的正确方法?
谢谢!
位域对齐和填充是实现定义的。您将需要调查您的编译器是否在位域中添加了填充到结构中。极有可能。 –
也使用一个签名的基础类型('__int8')可能不是最好的主意。 –
试图用 '编译包(推,1) 编程 编译包(弹出)' 它应该消除任何填充问题,如山姆Varshavchik提到的。 – GoldenSpecOps