2013-05-13 8 views
12

Sto provando a convertire un carattere [] in ASCII in carattere [] in esadecimale.Converti caratteri ascii [] in caratteri esadecimali [] in C

Qualcosa di simile a questo:

ciao -> 68656C6C6F

voglio leggere dalla tastiera la stringa. Deve essere lungo 16 caratteri.

Questo è il mio codice ora. Non so come fare questa operazione. Ho letto di strol ma credo che sia solo convertire numero str a int esadecimale ...

#include <stdio.h> 
main() 
{ 
    int i = 0; 
    char word[17]; 

    printf("Intro word:"); 

    fgets(word, 16, stdin); 
    word[16] = '\0'; 
    for(i = 0; i<16; i++){ 
     printf("%c",word[i]); 
    } 
} 

Sto usando fgets perché ho letto è meglio di fgets ma posso cambiarlo se necessario.

Correlato a ciò, sto provando a convertire la stringa letta in un array uint8_t, unendo ogni 2 byte in uno per ottenere il numero esadecimale.

Ho questa funzione che sto usando molto in arduino quindi penso che dovrebbe funzionare in un normale programma C senza problemi.

uint8_t* hex_decode(char *in, size_t len, uint8_t *out) 
{ 
    unsigned int i, t, hn, ln; 

    for (t = 0,i = 0; i < len; i+=2,++t) { 

      hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0'; 
      ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0'; 

      out[t] = (hn << 4) | ln; 
      printf("%s",out[t]); 
    } 
    return out; 

}

Ma, ogni volta che chiamo quella funzione nel mio codice, ottengo un errore di segmentazione.

Aggiungendo questo codice per il codice del primo risposta:

uint8_t* out; 
    hex_decode(key_DM, sizeof(out_key), out); 

ho trovato a passare tutti i parametri necessari e ottenere in fuori matrice che mi servono ma non riesce ...

+0

'uint8_t * fuori,' -> '* uint8_t out = calloc (sizeof (out_key), sizeof (* out));' o 'strlen (key_DM) + 1' invece di' sizeof (out_key) '. – BLUEPIXY

risposta

10
#include <stdio.h> 
#include <string.h> 

int main(void){ 
    char word[17], outword[33];//17:16+1, 33:16*2+1 
    int i, len; 

    printf("Intro word:"); 
    fgets(word, sizeof(word), stdin); 
    len = strlen(word); 
    if(word[len-1]=='\n') 
     word[--len] = '\0'; 

    for(i = 0; i<len; i++){ 
     sprintf(outword+i*2, "%02X", word[i]); 
    } 
    printf("%s\n", outword); 
    return 0; 
} 
+0

Sto stampando solo per esempio. Ma voglio salvare la stringa in un'altra stringa. Come devo fare il cast? – Biribu

+1

@Biribu i risultati di questo programma memorizzati in 'outword'. La fusione non è necessaria. – BLUEPIXY

+0

L'ho visto adesso. Scusate. Ho appena visto la stampa quando ho letto. Funziona bene. Grazie mille. – Biribu

5

Sostituire questo

printf("%c",word[i]); 

da

printf("%02X",word[i]);