GLib API将十六进制字符串转换为ASCII字符串?

时间:2011-08-14 23:13:46

标签: c string hex ascii glib

我无法相信在GLib中没有API可以执行此操作,因为现在我只发现人们正在进行自己的转换,例如herehere (function named "decode")。我真的想在一个简单的GLib调用中找到一种方法来做到这一点,但如果没有办法,上面的方法对我来说不起作用,因为前者是C ++(我使用的是C / GObject)而后者是后者似乎没有完美的工作(我的结果长度有问题。)

TIA

2 个答案:

答案 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会有所帮助。