sprintf(buffer, "%03X", tmp) in C++
-
Ich moechte gern
sprintf(buffer, "%03X", tmp)in C++ realisieren. Im Moment transformiere ich normal mitstringstream << hex << tmpund mittelssubstrhole ich mir umstaendlich die letzten 3 Zeichen. Geht das einfacher? Boost-Loesungen sind willkommen, aber wuerde gern drauf verzichten.
-
Das macht man mit fill und width:
#include <iostream> #include <cstdio> #include <iomanip> using namespace std; int main() { int a = 12; printf("%03X", a); cout << '\n' << setfill('0') << setw(3) << hex << a << '\n'; }P.S.: Lustig: Meine Standardbibliothek schreibt bei printf die Hex-Zahlen mit Großbuchstaben und bei cout mit Kleinbuchstaben.
-
SeppJ schrieb:
P.S.: Lustig: Meine Standardbibliothek schreibt bei printf die Hex-Zahlen mit Großbuchstaben und bei cout mit Kleinbuchstaben.
printf schreibt bei %X mit Groß- und bei %x mit Kleinbuchstaben.
-
Hmm, verstehe ich das jetzt falsch, ich hatte an so etwas gedacht:
number %= 4096; char buffer[4] = {}; const char hexChars[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; for(int i=2;i>=0;--i) { buffer[i]=hexChars[number%16]; number/=16; }P.S.: Lustig: Meine Standardbibliothek schreibt bei printf die Hex-Zahlen mit Großbuchstaben und bei cout mit Kleinbuchstaben.[/quote]
printf("%03X", a); cout << '\n' << std::uppercase << setfill('0') << setw(3) << hex << a << '\n';Komisch, bei mir ist es anders herum
.
-
Argh, natürlich kommt da ein kleines x bei printf hin.
Naja, Bashar war sowieso schneller.
-
mapper schrieb:
Naja, Bashar war sowieso schneller.
Aber ich kannte std::uppercase nicht.
-
Danke fuer die Antworten, das spart schon mal eine Zeile. Leider muss ich immer noch einen Stream benutzen. Dachte eher an sowas wie to_string, wo man die Basis mit angeben kann. Werde ich wohl selbst implementieren. Aber
uppercase,fillundsetwsind sehr hilfreich.