16進数でASCIIのchar []をchar []に変換しようとしています。ascii char []をCの16進char []に変換します
このような何か:
こんにちは - > 68656C6C6F
私はキーボードで文字列を読みたいです。長さは16文字でなければなりません。
これは私のコードです。私はその操作を行う方法を知らない。私はfgetsのよりも優れて読みますが、必要であれば、私はそれを変更することができますので、私はfgetsのを使用しています
#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]);
}
}
...私はstrolについて読んだが、私はそれだけの六角intにstrの番号を変換すると思います。
これに関連して、uint8_t配列で読み取られた文字列を変換し、1つの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);
を私はすべての必要なパラメータを渡すと、私は必要なものを配列で取得しようとしたが、それが失敗した...
'uint8_t * OUTによって、' - > 'uint8_t *アウト=のcalloc(はsizeof(out_key)はsizeof(* OUT));' 'sizeof(out_key)'の代わりに 'strlen(key_DM)+ 1'を使用してください。 – BLUEPIXY