Comment faire pour convertir un float pour un 4 byte char en C?
Je veux convertir un nombre à virgule par exemple de 2,45 à l'4 byte char tableau.
ainsi, le 2.45 devrait ressembler à ceci '@' 'FS' 'Ì' 'Í'
qui est binaire la norme ieee représentation de 2.45 = 01000000 00011100 11001100 11001101
?
J'ai résolu le problème, mais elle a une mauvaise complexité. avez-vous des bonnes idées?
Merci pour les bonnes réponses.
pouvez-vous s'il vous plaît dites-moi le chemin du retour de la char tableau pour le nombre à virgule ?
- Que diriez -
char a[sizeof the_float]; memcpy(char_array, &the_float, sizeof the_float)
? 'Ì'
et'Í'
ne sont que la représentation de11001100 11001101
dans un jeu de caractères.
Vous devez vous connecter pour publier un commentaire.
Vous avez un peu de moyens de le faire, y compris ces deux:
Utilisation typecasting et les pointeurs:
Noter que ce n'est pas à l'abri de toute façon et qu'il n'y a pas de terminateur de chaîne après la "chaîne".
Utiliser un
union
:Le char tableau peut maintenant être consulté pour obtenir les valeurs d'octets. Notez également comme la première alternative, il n'y a pas de terminateur de chaîne.
memcpy()
est préféré au cours de vos deux approches. (En passant, la première méthode est "sécuritaire" tant que l'aliasing pointeur (signé ou non signé)char *
. Et la deuxième méthode n'a pas d'invoquer UB soit.union
partage la même mémoire. Cela signifie que vous ne pouvez obtenir de manière fiable la valeur de la dernière série de membre. Si j'ai mis lef
membre dans mon exemple, je ne dois obtenirf
après que jusqu'à ce que j'ai mis un autre membre. Sinon, n'est pas vraiment indéfini, mais peut causer des valeurs inattendues.char
. (Donc son plus infaillible.)memcpy()
travaillé dans ce sens, ça sera sûrement travailler dans l'autre sens.Suffit d'utiliser memcpy:
Si vous avez besoin en face de l'endianness alors que c'est une mince affaire que d'inverser les octets dans
a
par la suite, par exemple,