Je suis en train d'emballer et de déballer des coordonnées GPS dans un tampon de caractères:C: comment faire un empaquetage et un déballage struct dans char buffer?
J'ai un struct gpscoords en tant que tel:
typedef struct {
char north;
uint16_t lat;
uint16_t lat_frac;
char east;
uint16_t lon;
uint16_t lon_frac;
} gpscoords;
Comment dois-je emballer et déballer les gpscoords dans le tampon pointé par la variable tampon? Je veux convertir des entiers dans l'ordre du réseau avant de les emballer, mais je le fais à tort ci-dessous:
void pack_gpscoords(gpscoords *pos, char *buffer) {
pack_gpscoords(pos, &buffer);
memcpy(buffer, pos, sizeof(pos)+1);
}
void unpack_gpscoords(gpscoords *pos, char *buffer) {
unpack_gpscoords(pos, &buffer);
memcpy(pos, buffer, sizeof(buffer)+1);
}
Ils sont tous deux conçus pour être des fonctions infiniment récursives, ce qui signifie que la fonction continue à s'appeler jusqu'à ce que le programme se bloque ou que vous terminiez l'exécution. –
Rechercher "sérialisation" et utiliser bitshifts/bitops avec des types indépendants de la mise en œuvre. Ne pas simplement "memcpy" les données. Notez que pour le GPS, vous avez probablement NEMA, qui est un format ASCII. – Olaf
Etes-vous sûr de vouloir reconduire inconditionnellement dans vos fonctions? La descente infinie n'est généralement pas une bonne idée. – EOF