C言語で16進文字列をバイト配列に変換する 質問する

C言語で16進文字列をバイト配列に変換する 質問する

から変換する標準C関数はありますか?16進文字列をバイト配列に変換する?
独自の関数を書きたくありません。

ベストアンサー1

私の知る限り、これを行うための標準的な機能はありませんが、次の方法で簡単に実現できます。

#include <stdio.h>

int main(int argc, char **argv) {
    const char hexstring[] = "DEadbeef10203040b00b1e50", *pos = hexstring;
    unsigned char val[12];

     /* WARNING: no sanitization or error-checking whatsoever */
    for (size_t count = 0; count < sizeof val/sizeof *val; count++) {
        sscanf(pos, "%2hhx", &val[count]);
        pos += 2;
    }

    printf("0x");
    for(size_t count = 0; count < sizeof val/sizeof *val; count++)
        printf("%02x", val[count]);
    printf("\n");

    return 0;
}

編集

Al が指摘したように、文字列内の 16 進数が奇数の場合、先頭に 0 を付けるようにしてください。たとえば、上記の例では、文字列は正しい ではなく、誤って"f00f5"と評価されます。{0xf0, 0x0f, 0x05}{0x0f, 0x00, 0xf5}

@MassimoCallegari からのコメントに対応するために例を少し修正しました

おすすめ記事