janiaut
Messages postés8Date d'inscriptionjeudi 13 mars 2003StatutMembreDernière intervention30 août 2006
-
30 août 2006 à 10:41
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDerniè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:
Conversion from 'ipaddress' to non-scalar type 'string' requested