から変換する標準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 からのコメントに対応するために例を少し修正しました