Conversion string (binaire) to string (hexa)

janiaut Messages postés 8 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 30 août 2006 - 30 août 2006 à 10:41
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 30 août 2006 à 12:06
Bonjour, voila je susi toujours dans mon big programme, j'ai un petit problème sur une conversion d'un string (de mot binaire) en conversion de string (de mot hexa). voila ce que j'ai effectué :
//Le message exemple est : "10001101001010011" je voudrais le résultat  suivant : "1 1A52"

std::string bin_Hexa(std::string & chaine)

    int longueur = chaine.size();  // longueur en nb de caractere de la chaine entree    int i 0, j 0,separateur = 0; 
    int bits = 3;  // nombre d'octets dans un bit (de 0 à 7)
    int reste;  // reste de bits
    string chainetemp, chainelongue; // chaine destination en binaire


 reste = longueur%4;      //calcul le nombre de bits 
 i = longueur;
 while(i>0)
 {
     if(i>=3)      //si le nombre de bits restant est supérieur a trois on releve la chaine
     {               // pb ici la chaine ne contient pas
         chainetemp = chaine[i-3]+chaine[i-2]+chaine[i-1]+chaine[i];
         i= i-4;
      }
     else
     {
         chainetemp = "";            
         for(j=0;j<(bits+1-reste);j++)
         { 
             chainetemp += "0";      //rajoute des 0 pour les derniers octets dans notre cas pour le 1 qui est seul
         }
         for(j=0;j<reste;j++)
         { 
          chainetemp += chaine[reste-j];
          i--;
      }


  }
  
  switch (chainetemp)      //erreur dans le switch lors d'un passage de string
  {
   case "0000": chainelongue = "0"+ chainelongue; break;// 'valeur hexa '0'
   case "0001": chainelongue = "1"+ chainelongue;// 'valeur hexa '1'
   case "0010": chainelongue = "2"+ chainelongue;// 'valeur hexa '2'
   case "0011": chainelongue = "3"+ chainelongue;// 'valeur hexa '3'
   case "0100": chainelongue = "4"+ chainelongue;// 'valeur hexa '4'
   case "0101": chainelongue = "5"+ chainelongue;// 'valeur hexa '5'
   case "0110": chainelongue = "6"+ chainelongue;// 'valeur hexa '6'
   case "0111": chainelongue = "7"+ chainelongue;// 'valeur hexa '7'
   case "1000": chainelongue = "8"+ chainelongue;// 'valeur hexa '8'
   case "1001": chainelongue = "9"+ chainelongue;// 'valeur hexa '9'
   case "1010": chainelongue = "A"+ chainelongue;// 'valeur hexa 'a ou A'
   case "1011": chainelongue = "B"+ chainelongue;// 'valeur hexa 'b ou B'
   case "1100": chainelongue = "C"+ chainelongue;// 'valeur hexa 'c ou C'
   case "1101": chainelongue = "D"+ chainelongue;// 'valeur hexa 'd ou D'
   case "1110": chainelongue = "E"+ chainelongue;// 'valeur hexa 'e ou E'
   case "1111": chainelongue = "F"+ chainelongue;// 'valeur hexa 'f ou F'
   default:  std::cout<<"ERREUR DE SAISIE"<<std::endl; return 0;
  }
  if(separateur >= 3)
  {   chainelongue " "+ chainelongue;      //rajoute un séparateur tout les 4 octets (car beaucoup de chiffres> plus lisible 
   separateur=0;
  }
  else
  {
   separateur++;
  }
 
 } // fin de for - passage au quatre caracteres suivants de la chaine d'origine jusqu'a fin de chaine
 chainelongue+='\0'; // fermeture de la chaine de caractère génerée


 return chainelongue;
}
Merci beaucoup (plus spécialement à luthor qui m'a deja bcp aidé  )
A voir également:

1 réponse

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
30 août 2006 à 12:06
Salut;
Déjà tu devrais compléter la chaîne directement avec des 0 au lieu de tester à chaque fois, par ex. :

while(chaine.size()%4!=0) chaine="0"+chaine;

Puis ensuite :

int size=chaine.size();

for(int i=0;i<size;i+=4)
{
   string Str=chaine[i+3]+chaine[i+2]+chaine[i+1]+chaine[i];
   if(Str=="0000") chainelongue="0"+chainelongue;
   if(Str=="0001") chainelongue="1"+chainelongue;
   // ...
}

ça devrait aller (enfin j'espère)...
0
Rejoignez-nous