2011-08-14 4 views
2

Je ne peux pas croire qu'il n'y a pas d'API pour le faire dans GLib, pour l'instant j'ai seulement trouvé des gens qui font leur propre conversion, comme here et here (function named "decode"). Je voudrais vraiment trouver un moyen de le faire dans un simple appel GLib, mais s'il n'y a aucun moyen, les méthodes ci-dessus ne fonctionnent pas pour moi parce que le premier est C++ (j'utilise C/GObject) et le dernier ne semble pas fonctionner parfaitement (j'ai des problèmes avec la longueur du résultat).API GLib pour convertir une chaîne hexadécimale en chaîne ASCII?

TIA

+1

Pourriez-vous clarifier "ne semble pas fonctionner parfaitement (j'ai des problèmes avec la longueur du résultat)"? – glglgl

+1

Vous travaillez en supposant que c'est une tâche commune. Ce n'est pas le cas, les utilisateurs de votre programme ne sont généralement pas qualifiés ou capables d'entrer des chaînes hexadécimales. Binaire à hex est un peu plus commun, votre débogueur sait comment faire cela. Éloignez-vous de la machine pour un peu. –

Répondre

0

Comme mentionné, cela est un peu hors du commun. Si vous avez une chaîne hexagonale assez courte, vous pouvez le préfixer avec 0x et utiliser strtoll(). Mais pour les chaînes de longueur arbitraire, voici une fonction 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; 
} 
+0

'retval' ne peut pas être un caractère nul terminé et ne pointe pas vers une chaîne. – chux

0

Je ne suis pas 100% sûr de ce que vous entendez par « chaîne hexadécimale » mais peut-être this thread sera d'une aide.

Questions connexes