172 votes

int to hex string en c ++

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.

276voto

Kornel Kisielewicz Points 26556

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();
}

25voto

phlipsy Points 1164

Utilisez std::stringstream pour convertir des entiers en chaînes et ses manipulateurs spéciaux pour définir la base. Par exemple comme ça:

 std::stringstream sstream;
sstream << std::hex << my_integer;
std::string result = sstream.str();
 

18voto

Etienne de Martel Points 16020

Il suffit de l’imprimer sous forme de nombre hexadécimal:

 int i = /* ... */;
std::cout << std::hex << i;
 

8voto

Mahmut EFE Points 1040

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;
}
 

3voto

Mahesh Points 20994
int num = 30;
std::cout << std::hex << num << endl; // This should give you hexa- decimal of 30

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X