Pages: [1]   Go Down
Author Topic: Convertir char[] a byte[]  (Read 193 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas tengo un problema y es que al intentar copiar los numeros que tengo en un array de char a un array de byte, en vez de copiarlos tal cual los pasa a ascii parece.
Este es el código que estoy usando:

Code:
       byte codi[16];
       uint32_t input;

       while(!Serial.available()) ;

if(Serial.available())
input = Serial.parseInt();
       
        String valors = String(input, HEX);
       
        char caracters[valors.length()+1];
       
        for(int i=0; i<16; i++)
          codi[i] = 0;
       
        valors.toCharArray(caracters, valors.length()+1);
       
        for(int i=0; i < valors.length(); i++){
          codi[i] = caracters[i];
        }

        for(int i=0; i<16; i++)
        Serial.println(codi[i]);

El código del principio es trivial, lo importante es que si imprimo los valores que contiene el arry de char los imprime correctamente, pero si mediante un for copio esos valores a un array de byte los transforma. Alguna idea?
Logged

Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 502
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola. Si no me equivoco, las dos cadenas contienen el mismo dato; pero Serial.print diferencia char de byte a la hora de imprimir: cuando es char imprime el carácter ascii y cuando es byte imprime el valor.
Normalmente deberías declarar la cadena según lo que quieras almacenar en ella (en este caso estás almacenando caracteres, creo). No obstante si haces un cast,
Serial.println((char)codi)
creo que deberías obtener la misma salida.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ESque en realidad mi objectivo no es imprimirlo, sino guardar cada valor hexadecimal en la memoria del NFC, por eso necesito guardar los valores en hexadecimal de un valor introducido por serial en un array de uint8_t o byte
Logged

Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 502
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno; creo que tal vez tienes un poco de lío sobre cómo se pueden almacenar distintos tipos de datos. Es algo típico, pero te aseguro que si comprendes bien qué estás almacenando en memoria y cuántos bytes de memoria ocupa, habrás salvado un gran hándicap de la programación en C (y programación en general). No entiendo tu concepto "guardar cada valor hexadecimal". Quiero entender que te refieres a guardar una serie de valores numéricos de ocho bits (osea entre 0 y 255) en un array de bytes. Si es eso, no tiene nada que ver con el hexadecimal. El hexadecimal o decimal es tan solo una forma de presentarnos a los humanos un valor de forma más "cómoda" que el binario. Por supuesto que puedes guardar o enviar un número en hexadecimal, pero para la máquina no deja de ser una cadena de caracteres que no tiene nada que ver con el valor que representa, a no ser que se la transformemos a un tipo de dato numérico comprensible para ella (byte, int, float...).
Bueno; no te lío más. Prueba este código a ver si es a lo que te referías:
Code:
      byte codi[16];

      for(int i=0; i<16; i++){
            while(!Serial.available()) ;
            codi[i] = Serial.parseInt();
      }

      for(int i=0; i<16; i++)
            Serial.println(codi[i], HEX);

Deberás enviar 16 valores separados por comas, espacios u otro caracter antes de ver el resultado.
Saludos
Logged

Pages: [1]   Go Up
Jump to: