Привет программистам!
Не мог бы мне кто-нить пояснить такую ситуацию (пишу на Си).
Мне нужно получить последовательность байтов из union SENDPRICE в массиве char page[50].
Объявление следующее:
struct TLVHADPrefix
{
char Protocol[3];
char Version;
};
struct TLVHAD
{
struct TLVHADPrefix Prefix;
char WSCode[8];
WORD OperCode;
DWORD Len;
};
union SENDPRICE
{
char page[50];
struct
{
struct TLVHAD Header;
WORD Tag;
WORD Len;
char DATE[12];
} var;
};
Затем в теле функции я присваиваю значения членам структуры - члена union SENDPRICE:
union SENDPRICE vTLV302; // Объявление
memcpy( vTLV302.var.Header.Prefix.Protocol, "TLV", 3 );
vTLV302.var.Header.Prefix.Version = '1';
memcpy( vTLV302.var.Header.WSCode, "00000022", 8 );
vTLV302.var.Header.OperCode = 302;
vTLV302.var.Header.Len = 13;
vTLV302.var.Tag = 1;
vTLV302.var.Len = 23;
memcpy( vTLV302.var.DATE, "444444444447", 12 );
и смотрю, что появилось в page[50], ожидая там увидеть всю эту последовательность из 3 + 1 + 8 + 2 + 4 + 12 + 2 + 2 = 34 байтов (при чем в таком же порядке как в структуре ).
Но реально там: TLV100000022. - вообщем всего 14 байтов
Если же я ставлю в объявлении элемент DATE[12]; на первое место вот так (это я делал для эксперимента, хотя для моей задачи это не подходит):
union SENDPRICE
{
char page[50];
struct
{
char DATE[12];
struct TLVHAD Header;
WORD Tag;
WORD Len;
} var;
};
то получаю 444444444447TLV100000022. - 26 байтов
Как же все таки получить нужную последовательность, объясните мне дураку?