Hej!
Na początku - próbuję "napisać" swój pierwszy program w C. Ma być to klient TCP do obsługi projektora multimedialnego. Komunikacja jest dość prosta i opisana w dokumentacji projektora.
Bez problemowo komunikuję się z nim używając Netcata - chciałbym jednak mieć do tego dedykowaną aplikację.
Generalnie o ile wysłanie konkretnych danych do socketu nie sprawia mi jakichś szczególnych problemów to mam problem z ich odebraniem.
Po wysłaniu poprawnej komendy - projektor odpowiada. Przedstawię to na przykładzie odczytu licznika lampy.
0xFE - bajt startowy
0x00 - ID projektora
1 do n bajtów - treść odpowiedzi
1 bajt Suma kontrolna
0xFF - bajt końca
Konkretny przykład dla odczytu licznika lampy
0xfe 0x00 0x76 0x90 0x00 0x33 0x6f 0x3d 0xe5 0xff
No i tu pojawiają się pierwsze problemy z którymi kompletnie nie potrafię sobie poradzić...
Otóż sekwencja 0x76 0x90 0x00 0x33 0x6f 0x3d zawiera dane które potrzebuję odczytać
0x76 mówi mi o tym, że odczytuję dane lampy
0x90 mówi mi o tym, że odczytuję licznik lampy
0x00 0x33 0x6f 0x3d to słowo DWORD big endian (MSB, Byte 1, Byte 2, LSB)
Dane z socketu odczytuję poprzez:```
n = read(sockfd,lamp_timer,sizeof(lamp_timer));
//Test długości lamp_timer w bajtach
int leng;
leng = sizeof(lamp_timer);
printf("%d\n",leng);
if (n < 0)
error("ERROR reading from socket");
printf(lamp_timer);
Problem jest taki, że za cholerę nie wiem jak z tego co projektor odeśle użyć konkretnych bajtów i jak je zamienić na cokolwiek zrozumiałego dla człowieka. W powyższym przypadku projektor powinien podać czas pracy lampy w sekundach.
Czyli - jak mam odczytać konkretne bajty z tego co przyjdzie od projektora?
Jak to zamienić na cokolwiek zrozumiałego?
Podejrzewam, że większość z was uzna ten wątek za śmieszny ale dla kogoś kto próbuję się czegoś nauczyć - jest to dość skomplikowana kwestia :)
Z góry dzięki za pomoc
PS. Nie oczekuję rozwiązań na tacy :)
ntohl
nie byłoby sensowniejsze?