Страница 1 из 1

Получить последовательность байтов из структуры

Добавлено: 30 апр 2008, 10:31
DanilSoldatov
Привет программистам!

Не мог бы мне кто-нить пояснить такую ситуацию (пишу на Си).
Мне нужно получить последовательность байтов из 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 байтов

Как же все таки получить нужную последовательность, объясните мне дураку?