Come faccio a convertire un float in char *?


11

Ha posto questa domanda sullo scambio di stack di ingegneria elettrica ed è stato diretto qui:

Abbastanza autoesplicativo; come farei per convertire un float in un carattere *? Ho un codice in cui la "resistenza" del galleggiante viene costantemente aggiornata. Vorrei essere in grado di aggiornare la variabile "risultato" per assumere il valore di "resistenza". Ecco un po 'del codice, nel caso in cui aiuti:

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

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

Grazie per l'aiuto!

Risposte:


15

C'è una funzione nella libreria standard di Arduino chiamata dtostrf(). Lo penso come "Decimale per stringare galleggiante". Passi nel float, quanto vuoi che sia intero il numero (se si adatta), il numero di decimali di precisione - e il buffer che vuoi riempire.

Nota che! Devi fornire il buffer e devi fare attenzione a fornire più che sufficiente! Non dimenticare di aggiungere anche 1 (per memorizzare il carattere NUL alla fine):

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

Questo darà resultvalori come " 1.23"e " -1.23"e "123456789"(senza virgolette). Nota l'ultimo esempio: non troncerà il numero se è troppo grande e quel 10 caratteri result(non dimenticare il finale NUL) ha traboccato il buffer ...

Per inciso, se specifichi una larghezza negativa, non giustifica a destra la risposta, ma a sinistra lo giustifica (metti gli spazi alla fine anziché all'inizio).


Ha funzionato bene! Grazie mille gentile :)
higgsboson,

-2

Fondamentalmente stai provando a convertire una variabile a 4 byte (float) in una stringa a 4 byte (le variabili char hanno una dimensione di 1 byte). Maggiori informazioni sui tipi di dati Arduino qui http://playground.arduino.cc/Code/DatatypePractices

Puoi provare le risposte a queste domande /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Ammetto di essere confuso dall'uso del const char * result = "";tuo esempio.

La parola chiave "const" rende la variabile "sola lettura" e pertanto non è possibile modificarla. https://www.arduino.cc/en/Reference/Const

Modifica: Purtroppo non ho un dispositivo Arduino in questo momento per testare me stesso le soluzioni di cui sopra


1
La constparola chiave non rende la variabile di sola lettura. La variabile qui è un puntatore e non deve essere costante. La constparola chiave qualifica i dati puntati , non il puntatore stesso. In altre parole, non è consentito modificare la stringa tramite quel puntatore. Se si desidera un puntatore costante, dichiararlo come char * const result(o const char * const resultse si desidera un constpuntatore ai constdati).
Edgar Bonet,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.