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.
InformationsquelleAutor Babbu Maan | 2013-02-16