float to char (nicht Zahlen 0-9 sonder die decimalwerte) array und andersherum
-
Moin,
für ein Kommunikations Protokoll zwischen einem Autopiloten für Modellboote und PC/Fernbedienung schreibe ich gerade ein Protokoll. Es sollen Koordinaten übertragen werden.
Die Koordinaten sehen wie folgt aus:
120.354554 Es sind immer 1-3 Stellen vorm Komma und 6 hinter dem Komma.
Ich wollte zur Datenübertragung datenpackete erstellen.
Pro Koordinate immer 4 unsigned chars.
So solls später aussehen.unsigned char array[4]; array[0] = (unsigned char)120; array[0] = (unsigned char)35; array[0] = (unsigned char)45; array[0] = (unsigned char)54;
Habt ihr ne Ahnung wie ich die float Koordinate in das array bekommen, und später daraus wieder ein float bekomme?
Als ersten Ansatz könnte man mit "floor()" die Zahlen vorm Komma rausfinden.
MfG
Philipp
-
Durch Addition und Multiplikation:
float coord; coord = array[0]; // coord = 120.0 coord += array[1] * 0.01; // coord = 120.0 + 0.35 coord += array[2] * 0.0001; // coord = 12.35 + 0.0045 coord += array[3] * 0.000001; // coord = 12.3545 + 0.000054 printf("%f", coord); // coord ist ca. 12.354554
Nimm, wenn möglich und die Ergebnisse genauer sein sollen, double!
-
Ok danke,
ich versuchs.
MfG
Philipp
-
Oder gehe auf meine HP http://berniebutt.npaqe.de
Dort findest du zu float to char mit dtoa() eine passende Lösung. Den umkehrten Weg mache ich mit atof() der Standardbiblothek von C
-
unsigned char array[4],s[100]; int i[4]; float coord; /* Hin */ coord = 120.354554; sprintf(s,"%.6f",coord); if( 4==sscanf(s,"%d.%2d%2d%2d",&i[0],&i[1],&i[2],&i[3]) ) puts("ok"); a[0]=i[0];a[1]=i[1];a[2]=i[2];a[3]=i[3]; /* Rück */ sprintf(s,"%d.%02d%02d%02d",a[0],a[1],a[2],a[3]); sscanf(s,"%f",&coord);
-
-
lord-maricek schrieb:
ok, danke,
@berniebutt : der Link geht irgentwie nicht.
mfg
philippDann ist doch alles ok, wenn du eine passende Lösung hast!
Der Link in meinem Text schlägt tatsächlich fehl, warum weiss ich jetzt nicht. Der gleiche Link in der Fusszeile läuft jedoch einwandfrei. Da finden sich zwei unterschiedliche Funktionen. Eine ist schneller als die andere, hat jedoch einen kleineren Darstellungsbereich vor dem Komma. Den Link haben schon viele gefunden und können hoffentlich etwas damit anfangen.
Es sind oft so kleine Dinge und da reicht man gerne eine Lösung weiter.
edit: danke seldon: Tippfehler passieren nun mal. Schlimm nur, wenn deswegen ein Programm abstürzt oder Schrott liefert!
-
berniebutt schrieb:
Der Link in meinem Text schlägt tatsächlich fehl, warum weiss ich jetzt nicht.
Tippfehler (q statt g).