TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: JANDAL en 14 de Marzo de 2014, 20:16:52
-
Hola, ante todo un saludo a todos y felicitarlos por este espacio. Estuve leyendo aqui pero encontré específicamente lo que necesito. Agradezco la ayuda.
Estoy haciendo un programa en ccs para configurar un DS1307, leo datos con un teclado con k=kbd_getc() y armo un arreglo de 3 datos, asi: unsigned char array[3],
pero necesito pasar este vector a un numero entero. No se como hacerlo, he hecho de todo, atoi(), etc y etc, estaría enormemente agradecido por la ayuda. Como paso
este vector a un entero??? les dejo el codigo que hice en esa parte
while(a<=1){ //Para dos datos
k=kbd_getc(); //Lee el teclado
x=k-48;
if (k!=0) //Si se ha pulsado alguna tecla
{array[a]=x; //se guarda en la posición correspondiente
a++;
}
}
Ensayohoy.dia=atoi(array); //no me funciona
printf(lcd_putc,"\f DIA %2u ",Ensayohoy.dia); //siempre muestra cero
delay_ms( 500 );
-
Hola,
falta información. Qué es lo que querés hacer? Explícalo y detállalo lo mejor posible. Qué tipo de variable es Ensayohoy.dia?
La comprobación de k!= 0, debe hacerse antes de restarle el valor 48 al leído. Sino si presionas el 0 no te va a funcionar. Pero hasta no saber bien cuál es el comportamiento que deseas lograr, dificil ayudarte.
Saludos
-
La cadena debe de terminar en cero:
array[a]='\0';
Un saludo
-
Hola bruno gracias por le interes de ayudarme.
Es decir necesito convertir la vector array[3]={2,5} a un entero 25
-
Hola bruno gracias por le interes de ayudarme.
Es decir necesito convertir la vector array[3]={2,5} a un entero 25
Como te comenta jfh900 tu cadena debe terminar en 0
si ya tienes un vector con los datos v[0]='2' y v[1]='5' al siguiente elemento de la cadena v[2]=0 y puedes usar la función atoi, toma en cuenta que tus elementos a converir deben ser ascii, y el elemento final es un 0 en decimal 0 != '0'.
Saludos
-
no es igual '2' que un 2 a secas, el primero da el codigo de ascii y el segundo es un numero.
Si sabes el numero determinado del array siempre puedes usar el metodo de decenas, centenas...
numero=array[2]*100+array[1]*10+array[0];
-
no es igual '2' que un 2 a secas, el primero da el codigo de ascii y el segundo es un numero.
Si sabes el numero determinado del array siempre puedes usar el metodo de decenas, centenas...
numero=array[2]*100+array[1]*10+array[0];
exacto!
'2' =0x32
y
2=0x02
Tendría que revisar si la libreria de kbd regresa el valor en ascii o en entero, nunca la he usado, pero por el kbd_getc yo diría que es ascii
-
No te funciona tampoco por que estas convirtiendo caracteres en números => x-48 <=. Elimina esta línea y añade un cero al final de la cadena con lo que funcionará "atoi".
Un saludo
-
while(a<2){ //Para dos datos
k = kbd_getc(); //Lee el teclado
if (k != 0) //Si se ha pulsado alguna tecla
array[a++] = k - 0x30; //se guarda en la posición correspondiente
}
Ensayohoy.dia= array[0] * 10 + array[1];
printf(lcd_putc,"\f DIA %2u ",Ensayohoy.dia); //siempre muestra cero
delay_ms( 500 );