我不敢相信GLib中没有这样的API,因为现在我只发现有人在进行自己的转换,比如herehere (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/

10-10 19:00