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

Signaler
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
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..."

4 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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++ (@++)<!--
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

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
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
9
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..."