我想分配一些內存,將其初始化爲一些值,然後將此內存的不同部分轉換爲不同的結構。東西如下:將內存投射到工會
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