我有這樣一個結構:無效的sizeof()結構,
typedef struct _HEADER_IO
{
uint8_t field1 : 2;
uint8_t field2 : 4;
uint8_t field3 : 1;
uint8_t field4 : 1;
uint16_t field5;
uint8_t field6;
} HEADER_IO;
這basicly消息報頭,將通過TCP發送。服務器讀取它以便它知道緩衝區中的數據。然而,由於某種原因,大小爲4字節(2 + 4 + 1 + 1第一字節+來自字段5 + 2字節字段6的2字節)的大小爲6字節。
看它在內存觀點是:
XX AA XX XX XX AA
相反的:
XX XX XX XX
凡AA不會被置不管我做什麼。這是一個問題,因爲我正在計劃將標頭設置爲send()
以連接到服務器,並且包含額外的字節使服務器解釋標頭錯誤。我究竟做錯了什麼?
你是什麼意思'寫一個函數來解碼數據並在處理之前將它存儲在你的結構中' – 2012-04-19 13:04:31
我很抱歉,你讓我困惑,數據數組來自哪裏,爲什麼你將24位而不是8? – 2012-04-19 13:09:13
但是,如果您不關心可移植性,則可以使用編譯器指令(如GCC或Visual C++專用指令)來設置結構打包。然後它會按原樣工作。 – jjrv 2012-04-19 13:09:22