一開始我上網搜尋看到有人指出這個行為並非C++標準,而且OS可能會自行把struct的member拆開令它們在記憶體中不是連續的(例如Windows會以4個Bytes為一個DWord以提升效率),這樣的話type cast就會搞到解碼錯誤,但只要加上一些OS提供的特殊語法就沒有問題。
例如Windows的話,要在struct前後加上#pragma pack,並且在前面說明以1 Byte為pack的單位。
#pragma pack(1) struct ABC{ /* member variables */ } #pragma pack()
當然,我覺得始終最好的方法是在constructor寫明怎樣解碼,這樣除了比較清晰容易檢查之外,也是一個跨平台的解決方法。
參考資料:
http://blog.xuite.net/kamory0931/fightdreamer/52223417-%E7%B5%90%E6%A7%8B%E7%9A%84%E5%B0%8D%E9%BD%8A(Struct+Member+Alignment)
沒有留言:
張貼留言