Я пытаюсь преобразовать char [] в ASCII в char [] в шестнадцатеричном формате.
Что-то вроде этого:
hello → 68656C6C6F
Я хочу прочитать по клавиатуре строку. Он должен быть длиной 16 символов.
Теперь это мой код. Я не знаю, как это сделать. Я читал про strol, но я думаю, что он просто преобразует число 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]);
}
}
Я использую fgets, потому что читаю лучше, чем fgets, но при необходимости могу изменить его.
В связи с этим я пытаюсь преобразовать строку, прочитанную в массив uint8_t, объединяя каждый 2 байта в одном, чтобы получить шестнадцатеричный номер.
У меня есть эта функция, которую я использую много в arduino, поэтому я думаю, что она должна работать в обычной программе 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;
}
Но всякий раз, когда я вызываю эту функцию в своем коде, я получаю ошибку сегментации.
Добавление этого кода в код первого ответа:
uint8_t* out;
hex_decode(key_DM, sizeof(out_key), out);
Я попытался передать все необходимые параметры и получить из массива то, что мне нужно, но он не работает...