Programación General > C/C++

 Convertir Cadena de caracteres en un float

<< < (3/6) > >>

fachamix:
vos no tienes una cadena, tienes un arreglo de caracteres, distintos unos de otros.

acordate que las cadenas necesariamente terminan con '' , vos ni siquiera tienes eso.


fijate el ejemplo de Eternal Idol, esta bien hecho y funciona.


--- Código: C++ --- unsigned char cad[4];cad[0]=23;cad[1]=45;cad[2]=128;cad[3]=76;float c;char *p;double a;a=atof((const char*)cad); /*si cambiaras esta linea por:                                       a=atof((const char*)cad[0]);                                       veras algo diferente y te va a ayudar a comprender loque estamos                                                                     diciendo                                       */printf("%frn",a);  

m0skit0:
zairillo, creo que tu problema radica en que no sabes cómo utilizar atof(). Esta función convierte una cadena de caracteres en un flotante, pero tal que


--- Código: C ---char *cadena = "123.45" se convierte en


--- Código: C ---float cadena_convertida = 123.45 pero si nos fijamos en los valores REALES de char *cadena, verás que (puedes usar un depurador para comprobarlo):


--- Código: C ---cadena[0]=49cadena[1]=50cadena[2]=51cadena[3]=46cadena[4]=52cadena[5]=53 es decir, son los códigos ASCII y no los números reales (el valor real en memoria) lo que convierte atof(). Evidentemente, si los códigos ASCII no son de números, te devolverá 0 (que es tu caso).

Además, como ya te dice Eternal Idol, unsigned char no tiene sentido, es lo mismo que char (lo puedes consultar donde quieras). Los caracteres no llevan signo, sino un código que los representa como puedes comprobar.

zairillo:
Muchas gracias por vuestra ayuda, me ha servido bastante.
Un saludo a todos!

zairillo:
Hola de nuevo!

Acabé entendiendo el ejemplo que me poniáis, lo hice en mi compilador y salió, pero a la hora de hacer lo mismo en mi proyecto me sigue devolviendo siempre 0.000000.
Me vuelvo a explicar por si hay algo que no dijese claro antes. Yo le mando una instrucción al GPS, el cuál me contesta con otra instrucción con un formato específico del protocolo que uso, y cada símbolo que me devuelve lo tengo almacenado en "unsigned char cad[100]". Entonces bien, yo para ver qué es lo que hay dentro hago un for(donde pongo un printf("%d",cad)), para sacar posición por posición lo que hay dentro de la cadena, por comprobarlo solamente, y me salen valores como 28, 64, 128, 154....Por lo que supongo que serán enteros asignados a los caractares ASCII de los símbolos que haya en cada posición de la cadena.
Entonces, cada 4 valores seguidos, en mi caso, me van a dar el nivel de cada satélite, por eso quiero unirlos y pasarlos a un float.
En la instrucción que me devuelve el GPS, según el protocolo los bytes(cada byte es una posición creo de la cadena) del 2 al 5 incluídos son el nvel del primer satélite(dice que el tipo de los bytes 2-5 es single(que equivale a un float)).

No sé si me he explicado un poco mejor, pero estoy desesperado porque no consigo convertirlo sin que me devuelva algo distinto a 0.000000.

Un saludo.

Eternal Idol:
Como te dije antes: ESO NO ES UNA CADENA. Son un conjunto de BYTES, olvida el termino cadena, se usa ese tipo de datos (unsigned char) para contener un BUFFER de lo que fuera.

Hace un casting a float si es verdaderamente un numero flotante de 4 bytes.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa