So drucken Sie hexadezimal-double in C?
Habe ich diese Zahl in hexadezimal:
FFFFFFFFFFFF
und ich brauche, um es zu speichern, so habe ich doppelte
double a=0xffffffffffff;
aber ich brauche, um es zu drucken und ich weiß nicht, wie. Jedes mal, wenn ich %f
, %d
, %x
es nicht, drucken Sie den Wert der it; ich brauche nur zu drucken ffffffffffff
. Mein code:
int main()
{
double a=0xffffffffffff;
printf("%x\n",a);
printf("%d\n",a);
printf("%X\n",a);
printf("%f\n",a);
return 0;
}
Die einzige wahre Wert ist %f
; dass die Rendite der dezimale Wert der hexadezimalen — es gibt diese:
ffffffe0
-32
FFFFFFE0
281474976710655.000000
mit diesem ich brauche eine änderung aus, die hexadezimale Zeichenfolge, um es zu vergleichen, weil ich FFFFFFFFFFFF in string zu und ich brauche zu vergleichen. Wenn ich nicht printf
es ist, wird weder sprintf
arbeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist eine ganze Zahl, und eine lange. Verwenden Sie nicht
double
zu speichern, solch einen Wert, dass die für die floating-point.Verwenden Sie einfach:
Haben Sie 12 hexadezimale Ziffern, so dass Ihre Anzahl muss mindestens 12 * 4 = 48 bits. Die meisten Plattformen sollte ein
unsigned long long
64 bit, das sollte in Ordnung sein.Wenn Ihr compiler unterstützt wird, genug, um Unterstützung von C99, das Sie tun können:
verwenden und dann die
uint_least64_t
geben, wie schon in einem Kommentar angedeutet. In Linux-ich denke, du bist mit GCC, so dass Sie sollten in Ordnung sein, müssen Sie möglicherweise angeben, dass Sie beabsichtigen, Ihren code kompiliert werden, wie C99 (mit-std=c99
).Drucken, verwenden Sie:
Beachten Sie auch, dass der Wert selbst ist nicht hexadezimal, aber können Sie es drucken als hexadezimal. Der Wert ist nur ein Wert, der base-Angelegenheiten nur bei der Konvertierung in/aus text -, D. H. eine externe Repräsentation der Zahl. Intern auf einem binären computer, die Anzahl gespeichert ist, in binäre.
unsigned long long
eher alsuint_least64_t
?Während Sie speichern den Wert in eine
double
es ist kein vernünftiger Weg, um hexadezimale Ausgabe.Ihren code übergibt ein
double
zuprintf()
und immer wieder versucht zu formatieren, dass Sie als eine nurint
; das wird nicht gut funktionieren. Wenn man GCC mit Warnungen aktiviert sind, sollten Sie haben Warnungen über Konflikte zwischen format-string und mit dem Wert (und wenn man GCC ohne-Warnungen aktiviert, bereuen Ihre böse/faul, Wege und drehen Sie die compiler-Warnungen — verwenden Sie-Wall
mindestens, und wahrscheinlich-Wextra
zu, und beheben Sie alle daraus resultierenden Warnungen).Den Wert 12 F ist, so ist es eine
long long
Wert (oderunsigned long long
); speichern Sie es und Sie als solche behandeln:In einem anderen Kontext, seine Frage ist gültig. Sagen Sie, Sie wollen zu drucken, die Ausgabe der
pow()
Funktion in hexadezimal - ich habe gerade festgestellt jetzt.So tun
Eine alte Frage, aber ich denke, die OP war zu versuchen, einen hex-string-Darstellung einer doppelten und wieder zurück.
Wenn dem so ist, hier einige code:
Die resultierende Ausgabe ist:
Lesen in der Zeichenfolge mit 16 Zeichen und erhalten Sie das doppelte zurück:
Ausgabe:
Beachten Sie, dass dies auf OSX, verschiedenen Plattformen darf nicht die gleichen binäre Darstellung für ein Doppelzimmer. Auch, nicht sicher, was passiert mit NaN und andere merkwürdige Werte.