Comment convertir un float en char *?

11

A posé cette question sur l'échange de piles de génie électrique et a été dirigé ici:

Assez explicite; comment pourrais-je convertir un float en char *? J'ai un code dans lequel la «résistance» du flotteur est constamment mise à jour. Je voudrais pouvoir mettre à jour la variable 'result' pour prendre la valeur de 'resistance'. Voici une partie du code, au cas où cela aiderait:

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

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

Merci de votre aide!

le boson de Higgs
la source

Réponses:

15

Il y a une fonction dans la bibliothèque Arduino standard appelée dtostrf(). Je pense que c'est "Decimal to String Float". Vous passez le flotteur, la largeur que vous voulez que le nombre entier soit (s'il convient), le nombre de décimales de précision - et le tampon que vous voulez qu'il remplisse.

Notez que! Vous devez fournir le tampon, et vous devez faire attention à en fournir plus qu'assez! N'oubliez pas d'ajouter également 1 (pour stocker le caractère NUL à la fin):

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

Cela donnera des resultvaleurs comme " 1.23"et " -1.23"et "123456789"(sans les guillemets). Notez le dernier exemple - il ne tronquera pas le nombre s'il est trop grand, et ce caractère à 10result (n'oubliez pas le final NUL) vient de déborder votre tampon ...

Par ailleurs, si vous spécifiez une largeur négative, cela ne justifiera pas la réponse à droite, cela la justifiera à gauche (mettez des espaces à la fin au lieu du début).

John Burger
la source
A bien fait l'affaire! Merci beaucoup monsieur gentil :)
higgsboson
-2

Fondamentalement, vous essayez de convertir une variable de 4 octets (float) en une chaîne de 4 octets (les variables char ont une taille de 1 octet). Plus d'informations sur les types de données Arduino ici http://playground.arduino.cc/Code/DatatypePractices

Vous pouvez essayer les réponses à ces questions /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

J'avoue que je suis confus par l'utilisation de const char * result = "";dans votre exemple.

Le mot clé "const" rend la variable "en lecture seule" et vous ne pouvez donc pas la modifier. https://www.arduino.cc/en/Reference/Const

Edit: Malheureusement, je n'ai pas de périphérique Arduino pour tester moi-même les solutions ci-dessus

evgi9
la source
1
Le constmot clé ne rend pas la variable en lecture seule. La variable ici est un pointeur, et elle n'a pas besoin d'être constante. Le constmot-clé qualifie les données pointées , pas le pointeur lui-même. En d'autres termes, vous n'êtes pas autorisé à modifier la chaîne via ce pointeur. Si vous voulez un pointeur constant, déclarez-le comme char * const result(ou const char * const resultsi vous voulez un constpointeur sur les constdonnées).
Edgar Bonet