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




Ответить с цитированием