Autor Tema: ¿Como mostrar cero a la izquierda en un string? (SOLUCIONADO)  (Leído 2112 veces)

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

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
¿Como mostrar cero a la izquierda en un string? (SOLUCIONADO)
« en: 12 de Diciembre de 2008, 15:36:00 »
Tengo una función que capta el resultado del CAD de un pic y lo transmite serialmente al PC, me decidí formatearlo a char.

Código: C
  1. ...
  2.      #device ADC=10
  3.      long resultado_CAD;
  4.          char cadena[5];
  5.          ...
  6.          
  7.          resultado_CAD=read_ADC();
  8.      itoa(resultado_CAD,10,cadena);
  9.          
  10.          ...
  11.          puts(cadena)
  12.         ...

en el programa del PC, usando el control MSComm1 del visual basic, he configurado

InBufferSize = RThreshold = InputLen = 5

esto quiere decir que se activará el evento comEvReceive cuando en el buffer hayan llegado 5 caracteres (los 4 mios mas el caracter nulo)

el problema viene por el resultado del cad , que varía desde 1 digito hasta 4 digitos (1 - 1024) y entonces cuando por ejemplo tengo 92 en el resultado del cad, el itoa hace:

cadena[0]= '9'
cadena[1]= '2'
cadena[2]= '\0'
cadena[3]= '\0'
cadena[4]= '\0'

lo que pretendo hacer es que sin importar la cantidad de digitos que tenga la conversión, siempre se agrupen de derecha a izquierda. Ejemplo:

CAD: 92 -> cadena = "0092"

CAD: 5 -> cadena = "0005"

CAD: 311 -> cadena = "0311"

alguna idea de como hacerlo?





« Última modificación: 13 de Diciembre de 2008, 16:35:23 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ¿Como mostrar cero a la izquierda en un string?
« Respuesta #1 en: 12 de Diciembre de 2008, 16:16:14 »
Hola.

Porque no usas mejor el sprintf();, con el le puedes dar formato a la salida, en tu caso se podria hacer sprintf(cadena, " %04lu", resultado_CAD);.

Saludos
El papel lo aguanta todo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: ¿Como mostrar cero a la izquierda en un string?
« Respuesta #2 en: 12 de Diciembre de 2008, 16:58:20 »
Tal como te dice MLO puedes usar el sprintf() para formatear el resultado ajustándolo a la derecha. Sin embargo esta forma de generar la salida tiene la desventaja de que rellena con espacios por la izquierda el número escrito.

Así si resultado_CAD tiene el valor 123 al utilizar sprintf(cadena,"%5Lu" resultado_CAD); te generará un contenido en cadena de [_][_][1][2][3].

Yo entonces hago uso de una pequeña función para sustituir un carácter por otro dado de forma que cambien los espacios en blanco por ceros.  :mrgreen:

Código: C#
  1. sprintf(cadena,"%5Lu" resultado_CAD);
  2. replace_char(' ','0',(char*) cadena);
  3.  
  4. /** \brief Reemplaza carácter en string null-terminated.
  5.   * \param c Carácter a sustituir.
  6.   * \param p Carácter nuevo a insertar.
  7.   * \param[out] pF  Puntero a string null-terminated.
  8.   * \return void
  9.   */
  10. void replace_char(char c, char p, char* pF){
  11.  
  12.    int8 i;
  13.    char x;
  14.  
  15.    x=pF[0];
  16.    for(i=0;i<5,x!='\0';i++){
  17.       x=pf[i];
  18.       if(x==c){
  19.          pF[i]=p;
  20.       }
  21.    }
  22. }
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: ¿Como mostrar cero a la izquierda en un string?
« Respuesta #3 en: 12 de Diciembre de 2008, 17:00:34 »
No, amado Diego, la función de MLO rellena por la izquierda con '0': sprintf(cadena, " %04lu", resultado_CAD);

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: ¿Como mostrar cero a la izquierda en un string?
« Respuesta #4 en: 12 de Diciembre de 2008, 17:01:20 »
Ok. No ví el cero.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: ¿Como mostrar cero a la izquierda en un string?
« Respuesta #5 en: 12 de Diciembre de 2008, 22:38:47 »
Como comentario hay que tener cuidado con sprintf y números flotantes. El método %04f no funciona bien en CCS, hay que implementar técnicas avanzadas como la de Diego.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: ¿Como mostrar cero a la izquierda en un string? (SOLUCIONADO)
« Respuesta #6 en: 13 de Diciembre de 2008, 16:35:04 »
SIII, funciona!!

para mi código, resultó mejor imprimir directamente :

printf("%04Lu",resultado_CAD);

ya me estaba metiendo en un callejón sin salida y ustedes me ayudaron a salir.  :-) :-)

muchas gracias  :wink:

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ¿Como mostrar cero a la izquierda en un string? (SOLUCIONADO)
« Respuesta #7 en: 15 de Diciembre de 2008, 12:24:44 »
Que bueno Pali  :-/ :-/ :-/

Saludos
El papel lo aguanta todo


 

anything