Wie konvertiere ich einen Float in char *?


11

Stellte diese Frage auf Electrical Engineering Stack Exchange und wurde hier gerichtet:

Ziemlich selbsterklärend; Wie würde ich einen Float in einen Char * umwandeln? Ich habe Code, in dem der Float-Widerstand ständig aktualisiert wird. Ich möchte in der Lage sein, die Variable 'Ergebnis' zu aktualisieren, um den Wert 'Widerstand' anzunehmen. Hier ist ein Teil des Codes, falls es hilft:

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

Danke für Ihre Hilfe!

Antworten:


15

In der Standard-Arduino-Bibliothek gibt es eine Funktion namens dtostrf(). Ich betrachte es als "Decimal to String Float". Sie übergeben den Float, wie breit die ganze Zahl sein soll (wenn sie passt), wie viele Dezimalstellen genau sind - und welchen Puffer sie füllen soll.

Beachten Sie, dass! Sie müssen den Puffer bereitstellen, und Sie müssen vorsichtig sein, um mehr als genug bereitzustellen! Vergessen Sie nicht, auch 1 hinzuzufügen (um das NUL-Zeichen am Ende zu speichern):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

Dies gibt resultWerte wie " 1.23"und " -1.23"und "123456789"(ohne Anführungszeichen). Beachten Sie das letzte Beispiel - es wird die Zahl nicht abschneiden, wenn sie zu groß ist, und dieses 10-stellige Zeichen result(vergessen Sie nicht das Finale NUL) hat gerade Ihren Puffer übergelaufen ...

Wenn Sie eine negative Breite angeben, wird die Antwort übrigens nicht rechtsbündig, sondern linksbündig (Leerzeichen am Ende anstelle des Anfangs).


Hat den Trick gut gemacht! Vielen Dank, mein Herr :)
Higgsboson

-2

Grundsätzlich versuchen Sie, eine 4-Byte-Variable (float) in eine 4-Byte-Zeichenfolge zu konvertieren (Zeichenvariablen haben eine Größe von 1 Byte). Weitere Informationen zu Arduino-Datentypen finden Sie hier http://playground.arduino.cc/Code/DatatypePractices

Sie können die Antworten auf diese Fragen unter /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c ausprobieren

/programming/24420246/c-function-to-convert-float-to-byte-array

Ich gebe zu, dass mich die Verwendung von const char * result = "";in Ihrem Beispiel verwirrt .

Das Schlüsselwort "const" macht die Variable zu "schreibgeschützt" und kann daher nicht geändert werden. https://www.arduino.cc/en/Reference/Const

Bearbeiten: Leider habe ich momentan kein Arduino-Gerät, um die oben genannten Lösungen selbst zu testen


1
Das constSchlüsselwort ist nicht die Variable machen schreibgeschützt. Die Variable hier ist ein Zeiger und muss nicht konstant sein. Das constSchlüsselwort qualifiziert die Daten, auf die verwiesen wird , nicht den Zeiger selbst. Mit anderen Worten, Sie dürfen die Zeichenfolge nicht über diesen Zeiger ändern. Wenn Sie einen konstanten Zeiger möchten, deklarieren Sie ihn als char * const result(oder const char * const resultwenn Sie einen constZeiger auf constDaten möchten ).
Edgar Bonet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.