Des représentations hexadécimales des nombres de 32 bits
J'ai un script qui génère deux aléatoire de 32 bits à virgule flottante nombres a et b, et divise pour faire une sortie c.
Je voudrais stocker tous les 3 de ces nombres à virgule flottante au format hexadécimal, comme une chaîne de caractères qui contient 8 caractères.
J'ai trouvé un moyen astucieux de le faire en ligne ici:
http://forums.devshed.com/c-programming-42/printing-a-float-as-a-hex-number-567826.html
Et voici ma mise en œuvre de leurs conseils en C++
fileout << hex << *(int*)&a[i] << endl;
fileout << hex << *(int*)&b[i] << endl;
fileout << hex << *(int*)&c[i] << endl;
Cela fonctionne pour la plupart des cas. Cependant, dans certains cas, les chaînes ne sont pas de 8 caractères. Parfois, ils ne sont qu'un peu long. Voici un exemple de la sortie:
af1fe786
ffbbff0b
fffbff0b
7fbcbf00 <-I like it, but has zeros at the end
77fefe77
7ffcbf00
fdad974d
f2fc7fef
4a2fff56
67de7744
fdf7711b
a9662905
cd7adf0 <-- problem
5f79ffc0
0 <--- problem
6ebbc784
cffffb83
de3bcacf
e7b3de77
ec7f660b
3ab44ae4
aefdef82
fffa9fd6
fd1ff7d2
62f4 <--why not "62f40000"
ebbf0fa6
ddd78b8d
4d62ebb3
ff5bbceb
3dfc3f61
ff800000 <- zeros at end, but still 8 bytes?
df35b371
e0ff7bf1
3db6115d
fbbfbccc
ddf69e06
5d470843
a3bdae71
fe3fff66
0 <--problem
979e5ba1
febbe3b9
0 <-problem
fdf73a80
efcf77a7
4d9887fd
cafdfb07
bf7f3f35
4afebadd
bffdee35
efb79f7f
fb1028c <--problem
Je veux de 8 caractères des représentations. Comme pour le cas de zéro, je veux le convertir en "00000000".
Mais je suis vraiment confus au sujet de ceux qui sont seulement 4, 5, 6, 7 caractères. Pourquoi certains numéros obtenir rempli de zéros à la fin et d'autres pour obtenir tronquée? Si un int de 32 bits, pourquoi, parfois, seulement un peu montrer? Est-ce à cause infâme "subnormale" les chiffres?
Grâce.
- Cette "intelligence" est illégale dans la langue standard.
<--why not "62f40000"
<- parce que c'est 000062f4. Comme il est habituel pour les représentations numériques, les zéros non significatifs sont omis.
Vous devez vous connecter pour publier un commentaire.
Si je comprends bien votre exigence, vous souhaitez ajouter des zéros comme un remplissage caractère de la gauche de vos représentations hexadécimales si le nombre de chiffres est inférieur à 8.
Dans ce cas, vous pouvez simplement utiliser la
std::setfill()
lastd::setw()
flux manipulateurs:Pour
n = 1024
, par exemple, la sortie sera:Utilisation
std::setw()
etstd::setfill()
:oublier l'intelligence (c'est n'importe quoi mais). découvrez
setw
etsetfill
.