GLib API для преобразования шестнадцатеричной строки в строку ASCII? - PullRequest
2 голосов
/ 15 августа 2011

Я не могу поверить, что в GLib нет API для этого, сейчас я нашел только людей, которые выполняют свое собственное преобразование, например здесь и здесь (функция с именем "decode") . Я действительно хотел бы найти способ сделать это с помощью простого вызова GLib, но если нет никакого способа, вышеупомянутые методы не работают для меня, потому что первый - C ++ (я использую C / GObject), а второй кажется, не работает идеально (у меня проблемы с длиной результата).

ТИА

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Я не уверен на 100%, что вы подразумеваете под "шестнадцатеричной строкой", но может быть эта ветка будет вам полезна.

0 голосов
/ 23 сентября 2011

Как уже упоминалось, это немного необычно. Если у вас достаточно короткая шестнадцатеричная строка, вы можете использовать префикс 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;
}
...