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 número entero sin signo de 10 bits, la pantalla LCD espera una cadena, por lo que 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]='\0';
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.
No hay ninguna razón por la que sprintf no funcione. Básicamente, esto imprime una cadena en un búfer 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);
cadena ahora contendrá la cadena "Valor: 5"
Su forma de manejar las cadenas es incorrecta. Acaba de crear un puntero de variable de pila a 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.
str[len]
and try that way" es un gran error cuando devuelve un puntero a esa variable (¡local!) más tarde, como pretende hacer el OP, vea return str;
.
yippie
sprintf()
. Estás confundiendo la manipulación de enteros y cadenas.usuario_1818839
phil escarcha
itoa()
será más pequeño?