mush74
Messages postés12Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention 8 mars 2008
-
6 mars 2008 à 12:40
mush74
Messages postés12Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention 8 mars 2008
-
7 mars 2008 à 12:05
Bonjour,
Un petit probleme (surement simple, étant nioub) a vous soumettre :
Je dispose d'une structure de ce type :
typedef unsigned short int uint16;
typedef unsigned long int uint32;
Je reçois dans un tableau "tab" 10 octets. Donc de la meme taille que ma structure.
Lorsque je fais un memcpy(&data, &tab[0], 10); je m'attends a remplir ma structure avec les valeurs du tableau. Mais voila, ca ne marche pas du tout.En fait, lorsque je demande l'affichage des adresses mémoire de d1, d2 et d3, je m'appercois que je vais toujours de 4 octets en 4 octets.
Ex : 0x80000000, 0x80000004, 0x80000008.
Or, vu que d2 a une taille de 2 octets, je pensais obtenir plutot :
Ex : 0x80000000, 0x80000004, 0x80000006.
Evidemment, comme cela ne fonctionne pas, la valeur de data.d1 est correcte, mais après data.d2 et data.d3 sont fausses...
Le pire, c'est qu'en changeant d1 en type long, je passe bien a 8 octets:
Ex : 0x80000000, 0x80000008, 0x8000000b.
mush74
Messages postés12Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention 8 mars 2008 6 mars 2008 à 13:32
Complément d'info :
Je recois des valeurs dans un buffer (tableau). Ces données proviennent d'un GPS et envoie des trames au format Garmin. Les données sont envoyées "en série" de longueur variable, et placée dans une structure (nommé PVT data par Garmin) qui mélange les données de 16, 32 et 64 bits dans un ordre bien particulier.
Donc a part faire un découpage de chaque valeur, il n'y a pas d'autres solutions ? Dans la trame Garmin, il n'y a pas de donnée "dummy". Meme si le découpage donnée par donnée peut fonctionner, je trouvais cela un peu "bricolage".
mush74
Messages postés12Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention 8 mars 2008 7 mars 2008 à 10:57
Je vais essayer tout cela. Cela dit je suis sous Ubuntu / GCC 4.2 / Code::Blocks. Donc je ne pense pas que cette directive s'applique. Mais au pire il y a surement un équivalent. je vais chercher un peu et je repost dès que j'ai la solution.