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