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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich das richtig verstehe Ihre Anforderung, die Sie hinzufügen möchten Nullen als Füll-Zeichen auf der Links Ihrer hexadezimal-Darstellungen, wenn die Anzahl der Ziffern ist kleiner als 8.
In diesem Fall können Sie einfach verwenden Sie die
std::setfill()
diestd::setw()
stream-Manipulatoren:Für
n = 1024
, zum Beispiel, ist die Ausgabe:Verwenden
std::setw()
undstd::setfill()
:vergessen die Klugheit (es ist aber nichts). check-out
setw
undsetfill
.