Conversión de int a string para AVR ATmega32

1

Estoy tratando de leer datos del ADC y mostrarlos en una pantalla LCD compatible con HD44870 con un ATmega32. Como los datos del ADC son un entero sin signo de 10 bits, la pantalla LCD espera una cadena, es necesaria alguna conversión. A continuación se muestra la función que escribí para lograr esta conversión.

char *int_to_str(uint16_t num, uint8_t len){
    uint8_t i;
    char *str;
    str[len]='
char *int_to_str(uint16_t num, uint8_t len){
    uint8_t i;
    char *str;
    str[len]='%pre%';
    for(i=(len-1); i>=0; i--){
        str[i] = '0' + num % 10;
        num/=10;
    }
    return str;
}
'; for(i=(len-1); i>=0; i--){ str[i] = '0' + num % 10; num/=10; } return str; }

Sin embargo, la función anterior no funciona. Acabo de obtener una pantalla en blanco donde se deben mostrar los números. Actualmente estoy usando itoa () y funciona. Sin embargo, preferiría escribir el mío ya que el tamaño del ejecutable resultante es crítico. Gracias.

    
pregunta Khadija

2 respuestas

3

No hay ninguna razón por la que el sprintf no funcione. Esto básicamente imprime una cadena a un buffer en lugar de la salida estándar.

Como ejemplo

char string[256];
int value = 5;
memset(string,0,sizeof(string[0])*256); // Clear all to 0 so string properly represented
sprintf(string,"Value: %d",value);

la cadena ahora contendrá la cadena "Valor: 5"

    
respondido por el Gustavo Litovsky
0

Su forma de manejar cadenas es incorrecta. Acaba de convertir un puntero de variable de pila en una cadena que no está inicializada y no apunta a una cadena con una longitud válida.

Declare str como str[len] e intente de esa manera.

    
respondido por el QuadCorei8085

Lea otras preguntas en las etiquetas