Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kotora en 15 Noviembre 2013, 16:26 pm



Título: Pasar de char a uint8_t...... me estoy volviendo majareta!
Publicado por: kotora en 15 Noviembre 2013, 16:26 pm
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 ;))))


Título: Re: Pasar de char a uint8_t...... me estoy volviendo majareta!
Publicado por: xiruko en 16 Noviembre 2013, 02:39 am
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.

Código
  1. char a=0xFF;
  2. uint8_t b=(uint8_t)a;

Saludos.


Título: Re: Pasar de char a uint8_t...... me estoy volviendo majareta!
Publicado por: 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;

}
 
output:

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




Título: Re: Pasar de char a uint8_t...... me estoy volviendo majareta!
Publicado por: rir3760 en 18 Noviembre 2013, 16:34 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:
Código
  1. 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