
kryptobs2000
Wie konvertiere ich eine Ganzzahl in eine Hex-Zeichenfolge in C++?
Ich kann einige Möglichkeiten finden, dies zu tun, aber sie scheinen hauptsächlich auf C ausgerichtet zu sein. Es scheint, dass es in C++ keine native Möglichkeit gibt, dies zu tun. Es ist jedoch ein ziemlich einfaches Problem; Ich habe eine int
die ich zum späteren Drucken in einen Hex-String umwandeln möchte.

Kornel Kisielewicz
Verwenden <iomanip>
‘S std::hex
. Wenn Sie drucken, senden Sie es einfach an std::cout
wenn nicht, dann verwenden std::stringstream
std::stringstream stream;
stream << std::hex << your_int;
std::string result( stream.str() );
Sie können die erste voranstellen <<
mit << "0x"
oder was auch immer Sie möchten, wenn Sie möchten.
Andere Manips von Interesse sind std::oct
(oktal) und std::dec
(zurück zur Dezimalzahl).
Ein Problem, auf das Sie möglicherweise stoßen, ist die Tatsache, dass dies genau die Anzahl von Ziffern ergibt, die zur Darstellung erforderlich sind. Sie dürfen verwenden setfill
und setw
das um das problem zu umgehen:
stream << std::setfill ('0') << std::setw(sizeof(your_type)*2)
<< std::hex << your_int;
Abschließend würde ich eine solche Funktion vorschlagen:
template< typename T >
std::string int_to_hex( T i )
{
std::stringstream stream;
stream << "0x"
<< std::setfill ('0') << std::setw(sizeof(T)*2)
<< std::hex << i;
return stream.str();
}
Um es leichter und schneller zu machen, schlage ich vor, das direkte Füllen einer Schnur zu verwenden.
template <typename I> std::string n2hexstr(I w, size_t hex_len = sizeof(I)<<1) {
static const char* digits = "0123456789ABCDEF";
std::string rc(hex_len,'0');
for (size_t i=0, j=(hex_len-1)*4 ; i<hex_len; ++i,j-=4)
rc[i] = digits[(w>>j) & 0x0f];
return rc;
}
Verwenden std::stringstream
zum Konvertieren von ganzen Zahlen in Strings und seine speziellen Manipulatoren zum Setzen der Basis. Zum Beispiel so:
std::stringstream sstream;
sstream << std::hex << my_integer;
std::string result = sstream.str();

vitaut
Das geht mit C++20 std::format
:
std::string s = std::format("{:x}", 42); // s == 2a
Noch bis std::format
ist weit verbreitet, die Sie verwenden können die {fmt}-Bibliothek, std::format
basiert auf (Gottriegel):
std::string s = fmt::format("{:x}", 42); // s == 2a
Haftungsausschluss: Ich bin der Autor von {fmt} und C++20 std::format
.
Geben Sie es einfach als Hexadezimalzahl aus:
int i = /* ... */;
std::cout << std::hex << i;
#include <boost/format.hpp>
...
cout << (boost::format("%x") % 1234).str(); // output is: 4d2

Peter Mortensen
Sie können Folgendes versuchen. Es funktioniert…
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
template <class T>
string to_string(T t, ios_base & (*f)(ios_base&))
{
ostringstream oss;
oss << f << t;
return oss.str();
}
int main ()
{
cout<<to_string<long>(123456, hex)<<endl;
system("PAUSE");
return 0;
}
9877400cookie-checkGanzzahl in Hex-String in C++yes