Pasar de char a uint8_t...... me estoy volviendo majareta!

Iniciado por kotora, 15 Noviembre 2013, 16:26 PM

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

kotora

Buenas, bueno, el topic lo dice todo, ¿no? jejeje...

Os posteo el code que tengo:

int main(void) {

        char a[]="0xFF,0xFF";
        uint8_t* b[sizeof a];
        int i,j,k;
//      b = atoi(a);
                print_P(PSTR("%s\n%d8\n"), a , b);

        memset (b,atoi(a),sizeof a);

/*        for(i = 0;i<=sizeof a;i++){
                b = atoi( &a);
                }

        for(i = 0;i<=sizeof a;i++){

        printf("%hhu\n",b);
        }
*/
}



Esto en realidad son datos que recibo por sockets, los troceo con la función strtoken y los almaceno en chars, ya que por los sockets me llegan en ASCII, finalmente, tiene que ir a parar a unos uint8_t que me sirven para comunicarme con un chip por SPI y dentro del uint tienen que ir info en hexadecimal, lo tengo todo listo y no soy capaz de meter la info de los sockets al uint.

Mil gracias ;))))

xiruko

Igual me equivoco pero... un entero sin signo de 8 bits no es lo mismo que un char? Yo haría un casting rápido para evitar posibles quejas del compilador y listo.

char a=0xFF;
uint8_t b=(uint8_t)a;


Saludos.

kotora

input: he probado todas las variantes posibles, y esta es la que menos errores me genera ;)
int main(void) {

        char a[]="0xFF,0xFF";
        uint8_t b=[uint8_t]a;

}

output:

ch.c:15:19: error: expected expression
        uint8_t b=[uint8_t]a;
                  ^
1 error generated.



rir3760

Cita de: kotora en 16 Noviembre 2013, 14:23 PM
input: he probado todas las variantes posibles, y esta es la que menos errores me genera ;)
int main(void) {

        char a[]="0xFF,0xFF";
        uint8_t b=[uint8_t]a;

}
Si no tienes un curso o libro de calidad sobre C deberías conseguir uno, para recomendaciones puedes utilizar el motor de búsqueda de los foros.

El error se genera porque no puedes utilizar corchetes para realizar una conversión explicita, deben ser paréntesis y aun cuando se utilizaran lo que se convertiría en este caso:
uint8_t b = (uint8_t) a;
No seria el contenido del array sino la dirección (en memoria) del array.

Otro problema es que el tipo uint8_t es un tipo entero sin signo y con exactamente ocho bits (usualmente equivalente al tipo "unsigned char") y por ende no puedes tomar una cadena como "\xFF\xFF" (dos caracteres cada uno con el valor 255) y tratar de obtener el valor numérico correspondiente 65,535 para almacenarlo en una variable cuyo rango es 0 .. 255.

Mejor explica de la forma mas clara posible lo que intentas hacer y si puedes poner un ejemplo mejor (sin sockets, solo con una cadena de prueba).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language