1
我基本上試圖使用聯合來將具有不同位寬的數據塊結構轉換爲漂亮的整數數組。我寫了一個小程序來說明我的問題。使用聯合寫入位邊界
#include <stdio.h>
#include <iostream.h>
union {
struct {
long blah1;
short blah2;
long blah3;
short blah4;
int blah5;
} data;
int buffer[6];
} db;
int main(int argc, char* argv)
{
db.data.blah1 = 0x1111111111111111;
db.data.blah2 = 0x2222;
db.data.blah3 = 0x3333333333333333;
db.data.blah4 = 0x4444;
db.data.blah5 = 0x55555555;
for(int i=0;i<6;i++) cout << "Word " << i << ": " << std::hex << db.buffer[i] << endl;
}
輸出:
Word 0: 11111111
Word 1: 11111111
Word 2: 2222
Word 3: 0
Word 4: 33333333
Word 5: 33333333
預期輸出:
Word 0: 11111111
Word 1: 11111111
Word 2: 33332222
Word 3: 33333333
Word 4: 44443333
Word 5: 55555555
我使用編譯gcc版本4.1.2 20080704(紅帽4.1.2-54)
我是否有格式不正確的東西,還是我想爲som使用此功能?除了它的意圖之外的東西?有沒有另一種方法可以實現我的預期產出,而無需使用按位操作和無盡轉移?
檢查'的sizeof(db.data)' –
看看http://stackoverflow.com/questions/3318410/pragma-pack-effect – happydave
@ happydave的鏈接幾乎回答了這個問題。所以雖然問題非常不同,但答案適用於這種情況。 – Floris