Salut,
Pour la réception tu lis les octets et tu cast dans le type que tu doit trouver. Ou bien tu crées une structure contenant toutes les info de la réponse et tu passes l'adresse de la structure au lieu de passer un buffer...
Moi je préfère passer une structure de buffer et faire un transtypage après de chaque buffer (exemple pour réception udp de 3 octets): dans le premier aotet le code d'erreur dans les deux suivant un entier sur deux octets:
struct DEM{ char rep; char alt[2]; }; DEM reponse; if ((Ret = recvfrom(ReceivingSocket, (char*)&reponse, sizeof(reponse), 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize)) == SOCKET_ERROR) { printf("ERROR: recvfrom failed with error %d\n", WSAGetLastError()); closesocket(ReceivingSocket); WSACleanup(); return 0; }
int octet1_bin1 = (reponse.alt[0] & 0x1) >> 0; int octet1_bin2 = (reponse.alt[0] & 0x2) >> 1; int octet1_bin3 = (reponse.alt[0] & 0x4) >> 2; int octet1_bin4 = (reponse.alt[0] & 0x8) >> 3; int octet1_bin5 = (reponse.alt[0] & 0x16) >> 4; int octet1_bin6 = (reponse.alt[0] & 0x32) >> 5; int octet1_bin7 = (reponse.alt[0] & 0x64) >> 6; int octet1_bin8 = (reponse.alt[0] & 0x128)>> 7;
int octet2_bin1 = (reponse.alt[1] & 0x1) >> 0; int octet2_bin2 = (reponse.alt[1] & 0x2) >> 1; int octet2_bin3 = (reponse.alt[1] & 0x4) >> 2; int octet2_bin4 = (reponse.alt[1] & 0x8) >> 3; int octet2_bin5 = (reponse.alt[1] & 0x16) >> 4; int octet2_bin6 = (reponse.alt[1] & 0x32) >> 5; int octet2_bin7 = (reponse.alt[1] & 0x64) >> 6; int octet2_bin8 = (reponse.alt[1] & 0x128)>> 8;
int Altitude; Altitude = octet1_bin8 * 32768; Altitude += octet1_bin7 * 16384; Altitude += octet1_bin6 * 8192; Altitude += octet1_bin5 * 4096; Altitude += octet1_bin4 * 2048; Altitude += octet1_bin3 * 1024; Altitude += octet1_bin2 * 512; Altitude += octet1_bin1 * 256;
Altitude += octet2_bin8 * 128; Altitude += octet2_bin7 * 64; Altitude += octet2_bin6 * 32; Altitude += octet2_bin5 * 16; Altitude += octet2_bin4 * 8; Altitude += octet2_bin3 * 4; Altitude += octet2_bin2 * 2; Altitude += octet2_bin1 * 1; closesocket(ReceivingSocket); return Altitude;
Cordialement, Sébastien.
|