struktura, a odzwierciedlenie pamięci...

0

Witam,
jako, że nie jestem b. dobry w C przychodzę z moim problemem do was :)

Mam tablice

uint8_t buffer[511];

tą tablicę przesyłam do funkcji przez wskaźnik...

funkcja(uint8_t *buf);

O ile z tego korzystam jak z tablicy
czyli

uint16_t  sPort = (buf[0] << 8) | buf[1];

to wszystko działa...

teraz chciałbym odzwierciedlić to w strukturze...

więc zadeklarowałem sobie

typedef struct tcp{
 uint16_t src_port;
 uint16_t dst_port;
...
} tcp;

w funkcji deklaruję wskaźnik:

tcp *rx = (tcp*) b;

i tu mam problem... :P

próbuję odczytać rx->src_port wychodzi mi dziwaczna liczba
jeżeli natomiast zrobię to bezpośrednio na "buf"w ten sposób:

uint16_t  sport = (buf[0] << 8) | buf[1];

to działa..

Może ktoś wytłumaczyć co robię nie tak ?

1

Strzelam, że dane przesynane są w network byte ordering - czyli big endian, a Twoja architektura (jak znacząca większość obecnie popularnych) używa little endian. Możesz użyć makr NTOHS i HTONS zamiast ręcznie sumować bity, ale więcej z tym nie zrobisz, jeśli moje domysły są prawdziwe.

0

Tak masz rację... nawet o tym nie pomyślałem :)
A więc dla testu zamieniłem bajty miejscami i wynik jest taki sam jak ten ze struktury...

1 użytkowników online, w tym zalogowanych: 0, gości: 1