Wie kann ich einen float
Wert in char*
in C
Sprache umwandeln?Konvertieren von Float in char *
Antwort
char buffer[64];
int ret = snprintf(buffer, sizeof buffer, "%f", myFloat);
if (ret < 0) {
return EXIT_FAILURE;
}
if (ret > sizeof buffer) {
/* Result was truncated - resize the buffer and retry.
}
, dass die String-Darstellung von myFloat
in myCharPointer
gespeichert werden. Stellen Sie jedoch sicher, dass die Zeichenfolge groß genug ist, um sie zu halten.
snprintf
ist eine bessere Option als sprintf
wie es sie nie über die Größe des Puffers schreiben garantiert werden Sie in Argument liefern 2.
Verwenden Sie stattdessen snprintf, um sicherzustellen, dass kein Puffer überläuft. – JeremyP
Tolle Idee! Ich werde das zu meiner Antwort hinzufügen ... –
char array[10];
sprintf(array, "%f", 3.123);
sprintf: (von MSDN)
@aJ Wenn der Wert im Puffer gedruckt wird, wird dieselbe Druckanweisung auch auf der Konsole ausgegeben. – boom
sprintf schreibt den Gleitkommawert in den Puffer. Wenn Sie dasselbe zur Konsole drucken möchten, verwenden Sie printf ("% f" ... –
char* str=NULL;
int len = asprintf(&str, "%g", float_var);
if (len == -1)
fprintf(stderr, "Error converting float: %m\n");
else
printf("float is %s\n", str);
free(str);
+1 obwohl es muss angegeben werden, es ist eine GNU-Erweiterung afaik.(asprintf ist ein GNU ext ich meine) – ShinTakezou
char array[10];
snprintf(array, sizeof(array), "%f", 3.333333);
in Arduino:
//temporarily holds data from vals
char charVal[10];
//4 is mininum width, 3 is precision; float value is copied onto buff
dtostrf(123.234, 4, 3, charVal);
monitor.print("charVal: ");
monitor.println(charVal);
Lange nach Annahme der Antwort.
Verwenden Sie sprintf()
oder verwandte Funktionen, wie viele andere Antworten vorgeschlagen haben, aber verwenden Sie einen besseren Formatbezeichner.
Mit "%.*e"
löst Code verschiedene Fragen:
Die maximale Puffergröße benötigt weit mehr sinnvoll ist, wie 18
sprintf(buf, "%f", FLT_MAX);
47+ brauchen könnte.sprintf(buf, "%f", DBL_MAX);
müssen 317+Mit
".*"
Code ermöglicht es, die Anzahl der Dezimalstellen zu definieren, benötigt einen String-Version vonfloat x
und nächsthöherefloat
zu unterscheiden. Für deatils, voneinander kleinefloat
s zu unterscheiden und nicht alle Druck"0.000000"
Printf width specifier to maintain precision of floating-point valueMit
"%e"
ermöglicht Code sehen, die das Ergebnis ist, wenn|x| < 0.0000005
.#define FLT_STRING_SIZE (1+1+1+(FLT_DECIMAL_DIG-1)+1+1+ 4 +1) // - d . dddddddd e - dddd \0 char buf[FLT_STRING_SIZE]; sprintf(buf, "%.*e", FLT_DECIMAL_DIG-1, some_float);
Ideen:
IMO, besser wie buf[FLT_STRING_SIZE*2]
2x Puffergröße für Notizblöcke zu verwenden.
Für zusätzliche Robustheit verwenden Sie snprint()
.
Sie können auf den Datenwert Datenbyte by Byte zugreifen und ihn über einen 8-Bit-Ausgabepuffer (z. B. USART) ohne Casting senden.
Upd: Vergessen Sie nicht über die Endlichkeit des Prozessors! – Peter
- 1. Konvertieren von char * in float oder double
- 2. Konvertieren von hex in float
- 3. Haskell int float und char float
- 4. Konvertieren von WORD in Char *
- 5. Konvertieren von int in char?
- 6. Konvertieren von char in int?
- 7. Float in Bits konvertieren
- 8. Konvertieren Zeichenfolge in char
- 9. Konvertieren Float in IEEE-Format in C
- 10. Konvertieren von Double in Float in Java
- 11. kann 'float' nicht in 'float *' für Argument '2' konvertieren
- 12. Konvertieren von String zu Float in C#
- 13. kann nicht von Double in Float konvertieren
- 14. Konvertieren von "unsigned char *" in "char *" (und String)
- 15. mssql konvertieren varchar in float
- 16. Konvertieren von Int in Char-Array
- 17. Konvertieren von Double in unsigned char?
- 18. Konvertieren von Char in Kleinbuchstaben im Batch
- 19. Konvertieren von Schlüsselcode in Schlüssel char
- 20. Konvertieren von int-Array in char-Array
- 21. Wie man Char in Float umwandelt
- 22. float-to-char-Array in C, sprintf
- 23. Konvertieren von String, in float (ohne atof) in C
- 24. einzigen char konvertieren
- 25. C++ - FILE * in CHAR konvertieren *
- 26. Konvertieren eines char * in int
- 27. Konvertieren eines NSString * in char?
- 28. konvertieren unsigned char * in String
- 29. Kann nicht von char (*) [10] konvertieren char ** im Gegenzug
- 30. Wie float nach float-Darstellung in Uint konvertieren?
Sie müssen genauer sein. Was willst du - eine textuelle Darstellung des Dezimalwertes des Floats? Ein Strom von Bytes, den Sie problemlos weitergeben können, um den Float später wieder herzustellen? – crazyscot