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;
}
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;
}
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
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
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.
0 Stimmen
Was genau sind Ihre Anforderungen? Der Titel sagt
0x0a
heißt es im Text Ihrer Frage0x0A
. In jedem Fall ist eine explizitestd::cout << "0x0a"
ostd::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 immer0x0
oder benötigen Sie eine Mindestlänge für die Zeichenfolge?0 Stimmen
Wenn die Hexadezimalzahl 0xA ist, möchte ich sie 0x0A. Wenn die Zahl 0x123 ist, möchte ich sie 0x0123 usw., d. h. eine gerade Anzahl von Hex-Ziffern.
0 Stimmen
Ich glaube, Sie haben nicht verstanden, worauf ich hinaus will. Sie haben genau angegeben, wie 10 erscheinen soll, aber was ist mit 1 bis 9 und 11 bis 15? Was ist mit 256? Wollen Sie
0x0a
weil Sie eine Mindestbreite wollen oder weil Sie immer eine führende Null wollen? Wenn Sie Ihre Angaben nicht genau machen, erhalten Sie möglicherweise nicht die gewünschten Antworten.0 Stimmen
Mögliche Duplikate von Wie kann ich einen int mit führenden Nullen auffüllen, wenn ich den Operator cout << verwende?