On July 16, 2014 4:09:03 PM CEST, Markus Teich <[email protected]> 
wrote:
>koneu wrote:
>> On July 16, 2014 3:28:44 PM CEST, Markus Teich
><[email protected]> wrote:
>> >            *w = ntohs(hdr[9]);
>> >            *h = ntohs(hdr[11]);
>> 
>> This will pass a char to ntohs; expanding it to a uint16_t, instead
>of passing
>> ntohs two bytes from the header.
>
>Heyho,
>
>of course you are right.
>
>ntohs(hdr[9] << 8 | hdr[10])
>
>or
>
>uint16_t *tw = hdr+9;
>*w = ntohs(*tw);
>
>should work.
>
>> The proper way would involve some pointer casting or a header struct.
>
>With a struct you get alignment issues, especially with the 9 byte
>magic, which
>aligns to nothing but 1 byte boundaries.
>
>--Markus

Nasty compiler screwing all my beautiful thoughts! :D

Reply via email to