我无法相信在GLib中没有API可以执行此操作,因为现在我只发现人们正在进行自己的转换,例如here和here (function named "decode")。我真的想在一个简单的GLib调用中找到一种方法来做到这一点,但如果没有办法,上面的方法对我来说不起作用,因为前者是C ++(我使用的是C / GObject)而后者是后者似乎没有完美的工作(我的结果长度有问题。)
TIA
答案 0 :(得分:0)
如上所述,这有点不常见。如果您有足够短的十六进制字符串,则可以在其前面添加0x
并使用strtoll()
。但对于任意长度的字符串,这里是一个C函数:
char *hex_to_string(const char *input)
{
char a;
size_t i, len;
char *retval = NULL;
if (!input) return NULL;
if((len = strlen(input)) & 1) return NULL;
retval = (char*) malloc(len >> 1);
for ( i = 0; i < len; i ++)
{
a = toupper(input[i]);
if (!isxdigit(a)) break;
if (isdigit(a)) a -= '0';
else a = a - 'A' + '\10';
if (i & 1) retval[i >> 1] |= a;
else retval[i >> 1] = a<<4;
}
if (i < len)
{
free(retval);
retval = NULL;
}
return retval;
}
答案 1 :(得分:0)
我不是100%确定“十六进制字符串”是什么意思,但可能this thread会有所帮助。