我不敢相信GLib中没有这样的API,因为现在我只发现有人在进行自己的转换,比如here和here (function named "decode")我很想在简单的GLUB调用中找到一种方法,但是如果没有办法,上面的方法对我来说不起作用,因为前者是C++(我使用C/GObjEDIT),后者看起来不太完美(我对结果的长度有问题)。
短暂性脑缺血发作
最佳答案
如前所述,这有点不常见如果有足够短的十六进制字符串,可以在其前面加上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;
}
关于c - GLib API将十六进制字符串转换为ASCII字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7060379/