У меня проблема со структурой, содержащей объединение. Вот проблема:
typedef struct
{
unsigned char Type;
union
{
unsigned char Length;
unsigned __int16 Length2;
}
char Value[0];
} TLV_TUPLE, *PTLV_TUPLE;
Если Type == 0x40h
, я использую Length2
, иначе использую Length
.
Я использую эту структуру для чтения этого файлового потока (в шестнадцатеричном формате):
FE 01 01 40 12 00 30 …
Теперь код:
unsigned char * m_pTLV;
/*code here to let m_pTLV points to the
first byte of the file, that is, point to 'FE' */
PTLV_TUPLE pTlv = (PTLV_TUPLE)m_pTLV; // cast m_pTLV to PTLV_TUPLE
Затем, когда я проверяю значение pTlv с помощью отладчика, я вижу это:
pTlv->Type == FE
pTlv->Length == 1
pTlv->Length2 == 4001
pTlv->Value == 12
Разве Length2
не должно быть 0x101
, а value
не должно быть 48
?
машина с прямым порядком байтов.
Пожалуйста, помогите мне с этим...
struct
непосредственно из файла почти всегда плохая идея. Напишите (а еще лучше сгенерируйте) свой рабочий код сериализации член за членом. - person 6502   schedule 06.03.2011