Autor Tema: Realizar conversion de un entero a cadena en pcw  (Leído 1473 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Pedro

  • PIC10
  • *
  • Mensajes: 7
Realizar conversion de un entero a cadena en pcw
« en: 10 de Abril de 2016, 10:46:33 »
Saludos, estoy empezando con pcw :( y no se si hay una funcion ya realizada en la que pueda pasar un entero a una matriz, para operar individualmente con las mismas. Ejemplo:

unsigned int valor_1 = 1234 ;

byte valor_2[5] ;

y que resultado estuviera :

valor[0] = 1;

valor[1] = 2;

valor[2] = 3;

valor[3] = 4;

He visto que hay una funcion :

String valor_2 = String(valor_1, DEC) ;

pero no funciona y cuando la realiza no puedo verlo de manera individual. Saludos y gracias :-)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Realizar conversion de un entero a cadena en pcw
« Respuesta #1 en: 10 de Abril de 2016, 11:25:20 »
Depende del valor que tenga tu variable. pero por ejemplo hasta 10 bits es algo asi:

http://www.todopic.com.ar/foros/index.php?topic=45897.msg383461#msg383461

Obviamente podes extenderlo para 16 bits si queres. El mejor metodo es el del for ( restas sucesivas, el modulo ocupa mucho tiempo de CPU ), ejemplo para 16 bits


Código: C
  1. for(milmilesima=0;milmilesima<10 && valor_1 > 10000;milmilesima++,valor_1-=10000);
  2.         for(milesima=0;milesima<10 && valor_1 > 1000;milesima++,valor_1-=1000);
  3.         for(centena=0;centena<10 && valor_1 > 100;centena++,valor_1-=100);
  4.         for(decena=0;decena<10 && valor_1 > 10;decena++,valor_1-=10);
  5.         unidad=valor_1;

Reemplaza milmilesima, milesima, centena y decena por valor_2[0] , valor_2[1], valor_2[2], valor_2[3], valor_2[4] respectivamente, y vas a tener el valor que buscas.

Citar
He visto que hay una funcion :

String valor_2 = String(valor_1, DEC) ;

No se que funcion es esa, pero nunca vi una asignacion a un string que pueda lograrse asi. Si queres pasarlo a string ( recorda que hay un caracter mas que es el nulo al final) podrias usar sprintf()

Código: C
  1. sprintf(valor_2,"%d",valor_1);

Como te decia recorda SIEMPRE que debe existir al menos un valor mas, es decir si valor_1 es siempre de 16 bits el maximo es de 65535, por lo tanto valor_2 deberia tener como minimo 6 lugares. 5 para los digitos + 1 caracter nulo que indica el fin del string.

Lo que si al ser un string, los valores van a estar en ASCII, es decir si tenes el numero 12345 y lo pasas en valor_2 vas a tener esto:

Código: [Seleccionar]
valor_2[0] = '1' = 0x31 = 49d
valor_2[1] = '2' = 0x32 = 50d
valor_2[2] = '3' = 0x33 = 51d
valor_2[3] = '4' = 0x34 = 52d
valor_2[4] = '5' = 0x35 = 53d
valor_2[5] = '\0' = 0x00 = 00d

Lo puse en hexadecimal y decimal, otra de las cosas es que si valor_1 tiene 4 digitos y no 5, valor_2[0] no va a ser 0, sino que va a tener el valor del primer digito y el string se termina en valor_2[4], con los for que pase arriba eso no es problema. El ejemplo en ambos serian:

valor_1 = 1234

Sprintf()
Código: [Seleccionar]
valor_2[0] = '1' = 0x31 = 49d
valor_2[1] = '2' = 0x32 = 50d
valor_2[2] = '3' = 0x33 = 51d
valor_2[3] = '4' = 0x34 = 52d
valor_2[4] = '\0' = 0x00 = 00d
valor_2[5] = '\0' = 0x00 = 00d

Con los for, recorda que no necesitamos un caracter nulo al final por lo cual tiene un elemento menos.
Código: [Seleccionar]
valor_2[0] = 0
valor_2[1] = 1
valor_2[2] = 2
valor_2[3] = 3
valor_2[4] = 4

La principal diferencia entre este y el anterior, es que el anterior es dedicado unicamente a enteros y de un tamaño de 16bits. Mientras que con sprintf podes pasar float,enteros de cualquier tamaño, etc. Lo cual hace a tu codigo mas portable, pero a costo de un uso mayor del micro.
« Última modificación: 10 de Abril de 2016, 11:30:29 por KILLERJC »

Desconectado Pedro

  • PIC10
  • *
  • Mensajes: 7
Re:Realizar conversion de un entero a cadena en pcw
« Respuesta #2 en: 10 de Abril de 2016, 16:34:24 »
 :-)Muchas gracias voy a probar


 

anything