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é
)