Convertir un float en une chaîne de caractères en c
Je suis en train d'écrire une fonction qui sera passé un flotteur dans la forme d'un pointeur void. Ce que j'essaie de faire, c'est de convertir qui flottent dans une chaîne équivalente afin que je puisse enregistrer que des données binaires dans la mémoire. Par exemple, l'appel de ma fonction comme suit:
void * f(void * data);
Si un utilisateur passe me
float value = 3.14;
Je voudrais le convertir en une chaîne de caractères comme indiqué ci-dessous:
"3.14"
L'approche que je pense que je devrais utiliser, serait d'abord déterminer le nombre de valeurs au sein de l'float: 3.14 = quatre valeurs. Je ne puis ont à parcourir chaque valeur et de le convertir à un personnage.
Quelques problèmes que je vais avoir, est de 1: je ne suis pas sûr si c'est encore possible de déterminer le nombre de valeurs associées à un flotteur. 2: Comment puis-je convertir chaque valeur dans son équivalent de chaîne?
Je suis tombé sur ltid et sprintf. Cependant, ltid ne fait pas partie de la bibliothèque standard C, et je ne suis pas sûr de savoir si ou de ne pas sprintf vais faire ce que je désire.
- sprintf(str, "%4.2 f", float)
- Vous voulez probablement
sprintf
. Vous ne pouvez pas (en général), figure un certain nombre de chiffres -- quelque chose qui est passé comme (par exemple)1.2
va finir comme quelque chose de l'ordre de1.99999999999999
(à la précision de la type-mais à virgule flottante binaire ne peut pas représenter0.2
précisément.
Vous devez vous connecter pour publier un commentaire.
La plupart des systèmes (en particulier ceux de POSIX) ont
snprintf
(etstrdup
) de sorte que vous pourriez codesi vous voulez retourner à la chaîne,
strdup
il (vous aurez besoin defree
le résultat destrdup
plus tard).PS:
sprintf
est plus dangereux quesnprintf
, car il pourrait débordement de la mémoire tamponstrdup()
) plus tard.float
est de 4 octets sur la plupart des Pc; undouble
est de 8 octets; le résultat desnprintf
puisstrdup
peut avoir plus d'une douzaine d'octets (etmalloc
-ed de la mémoire comme le résultat destrdup
ont souvent des frais généraux).snprintf
fait partie de la norme C depuis 1999.float
a beaucoup de connexion à la taille de sa représentation sous forme de chaîne. Cette réponse calcule le nombre maximal de caractères pour undouble
être 1078. Ce qui est beaucoup.float
n'est pas liée à la taille de sa représentation sous forme de chaîne.