c++ - from - cómo convertir de int a char*?
int to char* c (7)
La única forma que conozco es:
#include <sstream>
#include <string.h>
using namespace std;
int main() {
int number=33;
stringstream strs;
strs << number;
string temp_str = strs.str();
char* char_type = (char*) temp_str.c_str();
}
Pero, ¿hay algún método con menos tipeo?
Creo que puedes usar un sprintf:
int number = 33;
char* numberstring[(((sizeof number) * CHAR_BIT) + 2)/3 + 2];
sprintf(numberstring, "%d", number);
La solución estilo C podría ser usar itoa
, pero la mejor manera es imprimir este número en cadena usando sprintf
/ snprintf
. Compruebe esta pregunta: ¿cómo convertir un número entero a una cadena portably?
Tenga en cuenta que la función itoa
no está definida en ANSI-C y no es parte de C ++, pero es compatible con algunos compiladores. Es una función no estándar, por lo tanto, debes evitar usarla. Verifique también esta pregunta: ¿ Alternativa a itoa () para convertir un entero a la cadena C ++?
También tenga en cuenta que escribir código de estilo C durante la programación en C ++ se considera mala práctica y, a veces se denomina "estilo espantoso". ¿Realmente quieres convertirlo en una cadena char*
estilo C? :)
No descartaría el const en la última línea, ya que está ahí por una razón. Si no puedes vivir con un const char *, es mejor que copies el arreglo de caracteres como:
char* char_type = new char[temp_str.length()];
strcpy(char_type, temp_str.c_str());
Puedes usar boost
#include <boost/lexical_cast.hpp>
string s = boost::lexical_cast<string>( number );
Ver esta respuesta https://.com/a/23010605/2760919
Para su caso, simplemente cambie el tipo en snprintf desde long ("% ld") a int ("% n").
También puedes usar el casting.
ejemplo:
string s;
int value = 3;
s.push_back((char)(''0'' + value));
En C ++ 11, use
std::to_string
como:std::string s = std::to_string(number); char const *pchar = s.c_str(); //use char const* as target type
Y en C ++ 03, lo que estás haciendo está bien, excepto que uses
const
como:char const* pchar = temp_str.c_str(); //dont use cast