ASCII の char[] を 16 進数の char[] に変換しようとしています。
このようなもの:
こんにちは --> 68656C6C6F
文字列をキーボードで読みたい。長さは 16 文字にする必要があります。
これが今の私のコードです。その操作方法がわかりません。ストロールについて読みましたが、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 バイトを 1 つに結合して 16 進数を取得しようとしています。
私は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);
必要なすべてのパラメーターを渡して、必要なものを配列に取り込もうとしましたが、失敗します...