Je peux trouver des moyens de le faire, mais ils semblent surtout ciblés vers c. Il ne semble pas qu'il existe un moyen natif de le faire en c ++. Problème assez simple cependant, j'ai un int que j'aimerais convertir en chaîne hexagonale pour une impression ultérieure.
Réponses
Trop de publicités?Utiliser <iomanip>
s' std::hex
. Si vous imprimez suffit de l'envoyer à std::cout
,, si non, alors utilisez std::stringstream
std::stringstream stream;
stream << std::hex << your_int;
std::string result( stream.str() );
Vous pouvez faire précéder le premier <<
avec << "0x"
ou ce que vous voulez si vous le souhaitez.
D'autres manips d'intérêt std::oct
(octal) et std::dec
(retour à la virgule).
Un problème que vous pouvez rencontrer est le fait que ce produit le montant exact de chiffres nécessaires pour la représenter. Vous pouvez utiliser setfill
et setw
ce pour contourner le problème:
stream << std::setfill ('0') << std::setw(sizeof(your_type)*2)
<< std::hex << your_int;
Donc finalement, je vous suggère une fonction de ce genre:
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();
}
Vous pouvez essayer ça. ça marche...
#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;
}