Hexadezimal-Darstellungen der 32-bit-zahlen

Ich habe ein Skript, das generiert zwei zufällige 32-bit-floating-point-zahlen a und b, und teilt Sie, um eine Ausgabe c.

Ich würde gerne speichern, alle 3 dieser floating-point-zahlen in hexadezimal-format als eine Zeichenfolge mit 8 Zeichen.

Fand ich ein cleverer Weg, dies zu tun, online hier:

http://forums.devshed.com/c-programming-42/printing-a-float-as-a-hex-number-567826.html

Und hier ist meine Umsetzung Ihrer Ratschläge in C++

    fileout << hex << *(int*)&a[i] << endl;
    fileout << hex << *(int*)&b[i] << endl;
    fileout << hex << *(int*)&c[i] << endl;

Dies funktioniert für die meisten Fälle. Jedoch, einige der Fälle, die Saiten sind nicht 8 Zeichen breit. Manchmal sind Sie nur ein bisschen lang. Hier ist das Beispiel für die Ausgabe:

                            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

Will ich 8-Zeichen-Darstellungen. Für den Fall von null, ich will es konvertieren, auf "00000000".

Aber ich bin wirklich verwirrt über diejenigen, die nur 4, 5, 6, 7 Zeichen lang sein. Warum tun einige zahlen null gefüllt am Ende und die anderen abgeschnitten? Wenn ein int ist 32 bit, warum muss manchmal nur ein bisschen zeigen? Ist dies aufgrund der berühmt-berüchtigten "subnormal" zahlen?

Dank.

  • Diese "cleverer Weg" ist illegal in der Sprache standard.
  • <--why not "62f40000" <- denn es ist 000062f4. Wie üblich für numerische Darstellungen, führende Nullen werden weggelassen.
InformationsquelleAutor Babbu Maan | 2013-02-16
Schreibe einen Kommentar