C言語にてバイナリデータを 16進文字列に変換する

16進文字列は 1バイト(8ビット)のデータを16進文字 2文字で表現したものです。

どこかに定義がありそうな気がするが、 見つからなかった。

十六進法

下記を参考にした。

C言語 hexdump(16進ダンプ)を自作する

    // 読み込んだデータを1バイトずつ16進数で出力 
    for (i = 0; i < read_size; i++) {
        printf("%02X", bytes[i]);
    }

このコードでは標準出力に表示している。 欲しいのは文字列なので snprint を使用する。

逆変換は下記を参考にした。

qiita : 16進数文字列をバイナリに変換

const char * hex2bin(const char *hex, char *bin, size_t binsize) {
    if (hex && bin) {
        for (; binsize && isxdigit(hex[0]) && isxdigit(hex[1]); hex += 2, bin += 1, binsize -= 1) { 
            int r = sscanf_s(hex, "%2hhx", bin);                                              
            if (r != 1) {
                break;
            }
        }
}

サンプルコードを Guthub に公開した。
https://github.com/ohwada/MAC_cpp_Samples/tree/master/binary/hex