Convertir BYTE[] vers char * [Résolu]

cs_LordBob 2865 Messages postés samedi 2 novembre 2002Date d'inscription 11 mai 2009 Dernière intervention - 12 oct. 2007 à 13:02 - Dernière réponse : racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention
- 13 oct. 2007 à 02:50
Bonjour a tous,
voila en fait j'ai récupéré un algo de hash MD5, mon algo met le résultat dans un tableau de BYTE, j'aimerais récupérer ce résultat dans un char*. Mais je ne vois pas comment faire.
Pourriez-vous m'aider svp?
Merci par avance...
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
Afficher la suite 

4 réponses

Répondre au sujet
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 12 oct. 2007 à 16:01
+3
Utile
En char * ? Tu veux dire en chaine de caractère lisible ?

Dans ce cas, tu peux prendre chaque BYTE de ton tableau et faire une conversion grâce à itoa avec un radix de 16 puis tu concatènes les résultat à ta chaine final. Tu auras ainsi une chaine lisible de ton tableau de BYTE.
Ça devrait ressembler à:

char *tab2str (BYTE *pbBytes, int iSize, char *lpDest)
{
    while(iSize > 0) {
        char tmp[10], *i = tmp;

        itoa(*pbBytes++, tmp, 16);

        while(*i) *lpDest++ = *i++;
        *lpDest++ = ' ';

        iSize--;
    }

    *lpDest = 0;

    return lpDest;
}

int main (int argc, char *argv[])
{
    BYTE tab[] = {0x50, 0x60, 0x05, 0x14};
    char tmp[32];

    tab2str(tab, 4, tmp);

    printf("%s\n", tmp);

    return 0;
}

C++ (@++)<!--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SAKingdom
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 13 oct. 2007 à 02:50
+3
Utile
Salut,
Tu peux aussi utiliser une petite fonction qui fait directement la convertion sans passer par itoa(). Voici un exemple:

char* BytesToHex(char* destination, BYTE* source, int longueur)
{
    char chiffres[]="0123456789ABCDEF";
    int i;
    for(i=0; i<longueur; i++)
    {
        destination[i*2]=chiffres[source[i] >> 4];
        destination[i*2+1]=chiffres[source[i]& 0x0F];
    }
    destination[i*2]=0;
    return destination;
}

Pour l'appeler il suffit de faire par exemple:
    BYTE tableau[]={0x01,0x0f,0xab,0x1b,0x44,0x55,0x6a,0x7b,0x8c,0x9d,0xae,0xbf,0xc0,0xd1,0xe2,0xf3};
    char buffer[34];
    BytesToHex(buffer,tableau,16);
A noter que la taille du buffer doit être,  au moins, deux fois la taille du tableau +1.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de racpp
The_Guardian 318 Messages postés vendredi 25 mai 2007Date d'inscription 19 octobre 2007 Dernière intervention - 12 oct. 2007 à 15:00
0
Utile
Bonjour,

un byte ça veut dire un octet
un tableau de byte c'est donc un tableau d'octets
un char c'est aussi un octet (en C)

Donc tu devrais pas avoir trop de problèmes, du moment que tu arrives à convertir tes "byte" en "char".
_ et un char *, c'est un tableau d'octets aussi
A priori, pas de problèmes. Faudra faire attention par contre à ne pas considérer tes "char" comme des caractères signés
mais ça devrait pas poser de problème non plus
_ si tu as un problème (ce qui ne devrait pas être le cas), précise le langage dans lequel tu travailles et colle un bout de code

Une autruche ne se cuit pas aux petits lardons
Commenter la réponse de The_Guardian
cs_LordBob 2865 Messages postés samedi 2 novembre 2002Date d'inscription 11 mai 2009 Dernière intervention - 12 oct. 2007 à 20:50
0
Utile
merci beaucoup pour la réponse...
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
Commenter la réponse de cs_LordBob

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.