problème de conversion et concaténation des chaines de caractères
Bonjour tout le monde,
J'ai besoin de vos aides SVP.
Je suis entrain de créer un programme qui reçoit ne entrée un nombre hexadécimal. Le but du programme est de vérifier si ce nombre est écrit sur 8 octets. Sinon il ajoute les zéros manquants au début.
Par exemple: de : AFF12 je veux obtenir 000AFF12.
J'ai commencé par convertir mon nombre en chaine pour déterminer le nombre de caractère et savoir combien de 0 je dois ajouter, et concaténer ensuite cette suite de 0 à la chaine de base.
J'ai crée ce programme mais il plante donc surement il y a une erreur que je n'arrive pas à trouver.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int c;
char *chaine[10] ;
int c_res;
unsigned int c_long;
char *chaine_zero;
char *chaine_res;
printf("donner le nombre: \n");
scanf("%x", &c);
itoa(c,chaine,16);
printf("la chaine obtenu est : %s \n", chaine);
c_long=strlen(chaine);
printf("la longeur est : %d \n", c_long);
if(c_long==8)
{
c_res=c;
printf("le nombre = %x \n", c_res);
}
else
{
unsigned int nbre_zero=(8-c_long);
printf("nbre_zero= %d \n", nbre_zero);
switch(nbre_zero)
{
case 1:
chaine_zero="0";
break;
case 2:
chaine_zero="00";
break;
case 3:
chaine_zero="000";
break;
case 4:
chaine_zero="0000";
break;
case 5:
chaine_zero="00000";
break;
case 6:
chaine_zero="000000";
break;
case 7:
chaine_zero="0000000";
break;
}
printf("chaine_zero= %s \n", chaine_zero);
concat(chaine_zero, nbre_zero, chaine, c_long,chaine_res);
printf("chaine_res= %s \n", chaine_res);
c_res=atoi(chaine_res);
printf("le nombre = %x \n", c_res);
}
return 0;
}
void concat(char * str1, unsigned int nbc1, char * str2, unsigned int nbc2,char * rstr)
{
unsigned int i = 0;
rstr = (char*)malloc((nbc1+nbc2+1) * sizeof(char));
for(i = 0; i < nbc1; i++)
{
rstr[i]=str1[i];
}
for(i = 0; i < nbc2; i++)
{
rstr[i+nbc1]=str2[i];
}
rstr[nbc1+nbc2+1]='\0';
} |
Quelqu'un pourra m'aider SVP .
Merci :)