Próbuję przekonwertować znak [] w ASCII na char [] w systemie szesnastkowym.Konwertuj ASCII char [] na szesnastkowy znak [] w C
coś takiego:
cześć -> 68656C6C6F
chcę czytać o klawiaturze ciąg. Musi mieć 16 znaków.
To jest mój kod teraz. Nie wiem, jak wykonać tę operację. Czytałem o strol ale myślę, że po prostu przekonwertować liczbę str int hex ...
#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]);
}
}
Używam fgets ponieważ czytałem jest lepsza niż fgets ale mogę go zmienić w razie potrzeby.
Próbuję przekonwertować ciąg odczytywany w tablicy uint8_t, łącząc każde 2 bajty w jednym, aby uzyskać liczbę szesnastkową.
Mam tę funkcję, której używam w Arduino, więc myślę, że powinna działać bez problemu w normalnym programie C.
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;
}
Ale gdy zgłoszę tej funkcji w moim kodu, otrzymuję winy segmentacji.
Dodanie tego kodu do kodu pierwszej odpowiedzi:
uint8_t* out;
hex_decode(key_DM, sizeof(out_key), out);
starałem się przekazać wszystkie niezbędne parametry i dostać się na tablicy, co muszę, ale to nie ...
'uint8_t * na zewnątrz;' -> 'uint8_t * out = calloc (sizeof (out_key) sizeof * (z));' lub 'strlen (key_DM) + 1' zamiast' sizeof (out_key) '. – BLUEPIXY