16

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);

必要なすべてのパラメーターを渡して、必要なものを配列に取り込もうとしましたが、失敗します...

4

4 に答える 4

14
#include <stdio.h>
#include <string.h>

int main(void){
    char word[17], outword[33];//17:16+1, 33:16*2+1
    int i, len;

    printf("Intro word:");
    fgets(word, sizeof(word), stdin);
    len = strlen(word);
    if(word[len-1]=='\n')
        word[--len] = '\0';

    for(i = 0; i<len; i++){
        sprintf(outword+i*2, "%02X", word[i]);
    }
    printf("%s\n", outword);
    return 0;
}
于 2013-05-13T10:24:27.657 に答える
5

これを交換

printf("%c",word[i]);

printf("%02X",word[i]);
于 2013-05-13T09:45:53.937 に答える
4

%02Xフォーマット パラメータを使用します。

printf("%02X",word[i]);

詳細はこちら: http://www.cplusplus.com/reference/cstdio/printf/

于 2013-05-13T09:45:38.137 に答える