Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ApOkAlizE en 28 Noviembre 2011, 20:44 pm



Título: ¿como convertir de int a char en C++?
Publicado por: ApOkAlizE en 28 Noviembre 2011, 20:44 pm
Pues me he encontrado muchas veces que alguna funcion devuelve un int i se trata de pasarlo a char pero sin variar su contenido, por ejemplo al hacer esto.
int x;
x=system(dir");
char y[300];
*y=(char)x;
FILE * F;
F=fopen("prueva.txt","w");
fputs(y,F);
close(F);
pues en casos como este system te devuelve un int y quieres pasarlo a char pero si lo pasas a char lo necesario esque el valor quedara intacto cosa que no hace, no me digais de usar otra alternativa porque yo no quiero que me den el pez, yo quiero aprender a pescar.
¿Sabeis algun metodo para convertir sin que varie el valor?
gracias.


Título: Re: ¿como convertir de int a char en C++?
Publicado por: naderST en 28 Noviembre 2011, 21:23 pm
Hay una función NO ESTÁNDAR llamada itoa() la puedes revisar aquí

http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

Personalmente te recomiendo que hagas tu propia función itoa que sea estándar.

EDIT:

Aquí tienes un código en C++ que convierte de entero a string:

Código
  1. string itoa(int n){
  2. string rtn;
  3. for(rtn="";n>0;rtn.insert(rtn.begin(),n%10+'0'),n/=10);
  4. return rtn;
  5. }


Título: Re: ¿como convertir de int a char en C++?
Publicado por: rir3760 en 29 Noviembre 2011, 00:56 am
Para empezar el fragmento que pones es C. No tienes porque convertirlo antes de enviarlo al archivo ya que puedes hacerlo directamente con:
Código
  1. x = system("dir");
  2.  
  3. /* ... */
  4.  
  5. fprintf(F, "%d\n", x);
Para leerlo solo tienes que utilizar fscanf.

Código
  1. string itoa(int n){
  2. string rtn;
  3. for(rtn="";n>0;rtn.insert(rtn.begin(),n%10+'0'),n/=10);
  4. return rtn;
  5. }
Un problema aqui es que devolveria una cadena vacia (no es necesaria la asignacion inicial ya que todo objeto de la clase string inicia asi) si el numero pasado fuera el cero.

Otra opcion es:
Código
  1. string itoa(int n)
  2. {
  3. string s;
  4. char digit[] = "0123456789";
  5.  
  6. do {
  7. s = digit[n % 10] + s;
  8. }while ((n /= 10) > 0);
  9.  
  10. return s;
  11. }

Otra forma es utilizando clase stringstream:
Código
  1. string itoa(int n)
  2. {
  3. stringstream ss;
  4. string s;
  5.  
  6. ss << n;
  7. ss >> s;
  8.  
  9. return s;
  10. }

Un saludo