是否有任何标准的 C 函数可以将十六进制字符串转换为字节数组?
我不想编写自己的函数。
最佳答案
据我所知,没有标准的功能可以这样做,但通过以下方式很容易实现:
#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 指出的那样,如果字符串中有奇数个十六进制数字,则必须确保以 0 开头作为前缀。例如,字符串 "f00f5"
将被上面的例子错误地评估为 {0xf0, 0x0f, 0x05}
,而不是正确的 {0x0f, 0x00, 0xf5}
。
稍微修改了示例以解决@MassimoCallegari 的评论
关于c - C中的十六进制字符串到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408706/