C: Korrekte Art, “unsigned long” in Hex auszugeben

Lesezeit: 2 Minuten

Benutzer-Avatar
Etwas etwas

Ich habe eine Funktion, die ein bekommt unsigniert lang Variable als Parameter und ich möchte es in Hex drucken.

Was ist der richtige Weg, es zu tun?

Derzeit verwende ich Druckf mit “%lx”

void printAddress(unsigned long address) {
    printf("%lx\n", address);
}

Soll ich nach einem Printf-Muster suchen? ohne Vorzeichen langer Hex? (und nicht nur “long hex” wie oben erwähnt)

Oder tut Druckf Konvertieren Sie Zahlen nur mit den Bits in Hex? – also sollte mir das Schild sowieso egal sein?

Bearbeiten/Klarstellung

Diese Frage wurzelte in a Verwirrtheit: hex ist nur eine andere Ausdrucksweise Bits, was bedeutet, dass die Zahl mit Vorzeichen/Vorzeichen nur eine Interpretation ist. Die Tatsache, dass der Typ ist ohne Vorzeichen long verändert also nicht die Hex-Ziffern. Unsigned sagt Ihnen nur, wie Sie dieselben Bits in Ihrem Computerprogramm interpretieren.

  • Bitte konsultieren Sie die freundliche Dokumentation.

    – Kerrek SB

    8. April 2015 um 8:22 Uhr

  • Mit welchem ​​Problem haben Sie es zu tun %lx ? Dies sollte für ein unsigned long in Ordnung sein. Natürlich, wenn Ihr address Parameter ist wirklich eine Adresse, dann sollten Sie ihn wahrscheinlich als übergeben void * und damit drucken %p.

    – PaulR

    8. April 2015 um 8:26 Uhr


  • Was printf fehlt ist eine Möglichkeit zu drucken vorzeichenbehaftete Hexadezimalzahlen

    – rodrigo

    8. April 2015 um 8:30 Uhr

  • Tatsächlich sehe ich jetzt, dass in cplusplus.com sehr fett geschrieben wird, dass “x” unsigned hex ist. Du hattest recht, meine Frage ist nicht sehr hilfreich…

    – Etwas etwas

    8. April 2015 um 8:52 Uhr

  • @SomethingSomething: Wie die akzeptierte Antwort zeigt, ist sie eigentlich ganz trivial, dh das Handbuch enthält eine einfache Antwort auf Ihre Frage. Das Posten auf Stack Overflow hat nichts hinzugefügt.

    – Kerrek SB

    8. April 2015 um 9:26 Uhr


Benutzer-Avatar
entspannen

Du machst es richtig.

Aus die Handbuchseite:

o, u, x, X

Das unsigned int-Argument wird in unsigned oktal (o), unsigned decimal (u) oder unsigned hexadecimal (x and X) Notation konvertiert.

Also der Wert für x sollte immer sein unsigned. Um es zu schaffen long in der Größe, Verwendung:

l

(ell) Eine folgende Integer-Konvertierung entspricht einem long int- oder unsigned long int-Argument […]

So %lx ist unsigned long. Eine Adresse (Zeigerwert) sollte jedoch mit gedruckt werden %p und zu werfen void *.

  • Die Schlussfolgerung ist also eigentlich, dass “%lx” ohnehin unsigniert ist. Danke!

    – Etwas etwas

    8. April 2015 um 8:32 Uhr

  • “Also ist %lx unsigned long” klingt wie der Formatbezeichner unsigned long. Besser gesagt als "%lx" sollte verwendet werden mit unsigned long.

    – chux – Wiedereinsetzung von Monica

    2. März 2021 um 22:04 Uhr


Benutzer-Avatar
Himanshu Sourav

Ich denke, der folgende Formatbezeichner sollte funktionieren, probieren Sie es aus

printf("%#lx\n",address);

  • Nah, aber keine Zigarre! Entweder verwenden printf("0x%lx\n",address); oder printf("%#lx\n",address); aber nicht beide. Die erste druckt den Wert 0UL wie 0x0 während die zweite nur ausgegeben wird 0. Dieser Vorschlag wird dem OP etwas beibringen, hat aber nichts mit der Frage zu tun.

    – chqrlie

    8. April 2015 um 8:48 Uhr


1384550cookie-checkC: Korrekte Art, “unsigned long” in Hex auszugeben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy