> а теперь покажите мне безграмотному, как из этого получить #GHLGTMOHTISS\r, т.е. 01 50 d6 81, грамотный вы наш,
короткий ответ: никак.
во-первых, заголовок пакета должен выглядеть так:
Код:
typedef union tagOwenHeader
{
struct
{
int High : 8;
int Size : 4;
int Query : 1;
int Low : 3;
};
unsigned char Bytes[2];
}OWEN_HEADER, *POWEN_HEADER;
во-вторых, так как адрес у вас 11-битный, засовывать его в заголовок надо так:
Код:
hdr.High = addr >> 3;
hdr.Low = addr & 0x07;
и в результате вы получите то, что и должны:
40 30 D6 81 11 6D и #KGJKTMOHHHMT\В
ну и для всех остальных.
порядок и размер членов битового поля стандартом C не определяется. на другой платформе или компиляторе вы можете получить другие результаты. использование union -- плохая практика, особенно когда записывается один элемент, а читается другой.
и вообще, все это стрельба из пушки по воробьям, потому что проще и понятней писать сразу в буфер (Command в нашем случае).