89 Stimmen

Wie kann ich 0x0a anstelle von 0xa mit cout drucken?

Wie kann ich 0x0a anstelle von 0xa mit cout drucken?

#include  <iostream>

using std::cout;  
using std::endl;  
using std::hex;

int main()  
{  
    cout << hex << showbase << 10 << endl;  
}

0 Stimmen

Was genau sind Ihre Anforderungen? Der Titel sagt 0x0a heißt es im Text Ihrer Frage 0x0A . In jedem Fall ist eine explizite std::cout << "0x0a" o std::cout << "0x0A" scheint Ihren Anforderungen zu entsprechen, aber ich nehme an, dass Sie wirklich eine Zahl formatieren wollen. Wie wollen Sie (z. B.) 16, 255, 256, 65536, -1 formatiert haben?

0 Stimmen

@Charles Die Frage bezog sich darauf, wie man die 0 nach dem x und vor dem A bzw. dem a druckt. Wie Sie sehen können, ist die erste Antwort falsch, da sie immer noch 0xa druckt (0xA, wenn Großbuchstaben verwendet werden). Aber wie auch immer, die Frage ist bereits als beantwortet markiert.

0 Stimmen

Aber warum die zusätzliche 0 ? Wollen Sie immer 0x0 oder benötigen Sie eine Mindestlänge für die Zeichenfolge?

1voto

Versuchen Sie Folgendes: Sie stellen einfach Nullen auf der Grundlage des Betrags voran.

cout << hex << "0x" << ((c<16)?"0":"") << (static_cast<unsigned int>(c) & 0xFF) << "h" << endl;

Sie können dies leicht ändern, um mit größeren Zahlen zu arbeiten.

cout << hex << "0x";
cout << ((c<16)?"0":"") << ((c<256)?"0":"");
cout << (static_cast<unsigned int>(c) & 0xFFF) << "h" << endl;

Der Faktor ist 16 (für eine Hexadezimalziffer):
16, 256, 4096, 65536, 1048576, ..
jeweilige
0x10, 0x100, 0x1000, 0x10000, 0x100000, ..

Man könnte also auch so schreiben..

cout << hex << "0x" << ((c<0x10)?"0":"") << ((c<0x100)?"0":"") << ((c<0x1000)?"0":"") << (static_cast<unsigned int>(c) & 0xFFFF) << "h" << endl;

Und so weiter :P

1voto

rwhenderson Punkte 84

Um die Ausgabe von Hex zu verkürzen, habe ich ein einfaches Makro erstellt

#define PADHEX(width, val) setfill('0') << setw(width) << std::hex << (unsigned)val

dann

cout << "0x" << PADHEX(2, num) << endl;

0 Stimmen

Ich lächelte. Das Schreiben von C++ kann manchmal so mühsam sein, dass man auf Tabubereiche wie Makros zurückgreifen muss ("er sagte Makro, er sagte Makro", "töte ihn, töte ihn" ... Life of Brian reimagined for C++), um es lesbar zu halten.

0voto

Danilo Ramos Punkte 435

Druckt eine beliebige Zahl in Hexadezimal mit Auto-Padding '0' oder gesetzt. Vorlage erlaubt jeden Datentyp (z.B. uint8_t)

template<typename T, typename baseT=uint32_t> struct tohex_t {
    T num_;
    uint32_t width_;
    bool showbase_;

    tohex_t(T num, bool showbase = false, uint32_t width = 0) { num_ = num; showbase_ = showbase; width_ = width; }
    friend std::ostream& operator<< (std::ostream& stream, const tohex_t& num) {
        uint32_t w;
        baseT val;

        if (num.showbase_)
            stream << "0x";

        if (num.width_ == 0) {
            w = 0;
            val = static_cast<baseT>(num.num_);
            do { w += 2; val = val >> 8; } while (val > 0);
        }
        else {
            w = num.width_;
        }
        stream << std::hex << std::setfill('0') << std::setw(w) << static_cast<baseT>(num.num_);

        return stream;
    }
};
template<typename T> tohex_t<T> TO_HEX(T const &num, bool showbase = false, uint32_t width = 0) { return tohex_t<T>(num, showbase, width); }

Exemple :

std::stringstream sstr;
uint8_t ch = 91;
sstr << TO_HEX(5) << ',' << TO_HEX(ch) << ',' << TO_HEX('0') << std::endl;
sstr << TO_HEX(1, true, 4) << ',' << TO_HEX(15) << ',' << TO_HEX(-1) << ',';
sstr << TO_HEX(513) << ',' << TO_HEX((1 << 16) + 3, true);
std::cout << sstr.str();

出力します。

05,5b,30
0x0001,0f,ffffffff,0201,0x010003

0voto

pdepala Punkte 3
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    /*This should print out 0x0a. The internal adjustment pads the width with the fill character*/
    cout << hex << showbase << internal << setfill('0') << setw(4) << 10 << endl;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X