IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Realiser la conversion d'un byte(caractere ASCII) en binair


Sujet :

C

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Realiser la conversion d'un byte(caractere ASCII) en binair
    Bonjour,

    J'ai deja realisee(repris) une fonction qui realise cette conversion. Mais il me semble que j'obtiens des erreurs . Pouvez vous me confirmer ? Quelle est peut etre l'erreur flagrante de cette fonction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    	char* type2bin(char dec,char* bin)
    {
    	int r = 8;//nb de cases binaires
     
    	memset(bin,'0',r); //par defaut le nb bin est nul
    	bin[r] = 0;
     
    	while(r--)
    	{
    	bin[r] = '0' + ((dec & (1 << r)) != 0);
     
    	}
    	printf("bin=%s\n",bin);
    	return bin;
    }
     
     
    	void convertByteToBinary(char *textByte,char *textBinary)
     
    {//truncate to 128 bits
    	int n;
    	n=strlen(textByte);
    	char cat[n*8+1];
    	//char *cat;
    	char blb[9];
    	*cat = 0;
    	printf("n=%d\n",n);
     
    	//convert Byte To binaries
    	//printf("cat=%s\n",cat);
    	while(*textByte)
    	{
    	//conversion du char en binaire
    	type2bin(*textByte,blb);
         //printf("blb=%s\n",blb);
    	strcat(cat,blb);
    	printf("cat=%s\n",cat);
    	textByte++;
    	}
    	//	printf(" cat=%s\n",cat);
    	//	printf("ici\n");
    	strncat(textBinary,cat,128);
    	printf("textBinary=%s\n",textBinary);
    }
    En particulier char2bin realise la conversion byte -> binaire mais est elle fondee ?

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Oui il y a une erreur dans l'algo utilise par type2bin : tu travaille a l'envers (c'est a dire que 2 ==> "01000000" et non "00000010").

    Avec bin[7-r] = '0' + ((dec & (1 << r)) != 0); ca devrait aller un peu mieux.

  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    Tout d'abord merci pour l'optimisation de mon code !
    Mainteant dans la boucle while de convert j'ai quelaues petits problemes d'apres gdb et il ne va pas jusqu'au bout du programme...

    Lorsque aue j'ai textByte=S1=°1ñ☻'JO‼0 ☻♥^‼R¢íoñ▼?E.IE@ ↓Z^nb
    de longueur n=32
    je sais qu'il y a un segmentation fault au bout de 9 passage de while dans
    strcat(cat,blb);. A partir de la je ne sais plus quoi faire pour regler le probleme .
    Il y a assez de place dans cat[n*8+1] alors d'ou peut venir l'erreur.
    Quand je modifie strcat par strcpy il n'y a plus d'erreur en revanche le programme ne me ressort le textByte entier sous forme de binaires mais seulement les 8 dernier octets que strcpy a copier en dernier dans la boucle.

  4. #4
    Battosaiii
    Invité(e)
    Par défaut
    Je pense que l'erreur vient de la chaine de caractere en entree qui contient des espaces. Comment transformer un espace ASCII en binaire ? En effet lorsque je traite une autre chaine de cractere sans espace cette fonction marche .

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    Quelque chose cloche dans ce programme car lorsque je fais dans le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char SB1[128],VB1[128];
    char S1[32],V1[32];
    	V1="00000000000000000000000000000001";
     
    	convertByteToBinary(S1,SB1);
    	convertByteToBinary(V1,VB1);
    il m'affiche V1 correctement en binaire (VB1). Il ne m'affiche pas correctement SB1(en gros rien) en renache si je met un printf de SB1 entre ces 2 fonctions SB1 est correctement affiche ...[/code]

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Realiser la conversion d'un byte(caractere ASCII) en bin
    Citation Envoyé par Battosaiii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	strncat(textBinary,cat,128);
    }
    Si la chaine de destination n'a pas été initialisée avant un appel à strcat() ou strncat(), le comportement est indéfini.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Battosaiii
    Invité(e)
    Par défaut
    j'ai rajoute *textBinary=0; pour initialiser textBinary mais ca ne fait rien de plus. De quel facon dois je l'initialiser ?

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Battosaiii
    j'ai rajoute *textBinary=0; pour initialiser textBinary mais ca ne fait rien de plus. De quel facon dois je l'initialiser ?
    Chez moi, j'avais fait ça, et le résultat était correct.

    Poste le code exact complet et compilable avec le quel tu fais tes tests.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Battosaiii
    Invité(e)
    Par défaut
    Dans les memes conditions que dans mon message avant le precedent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    	encrypte(DT1,S1,K);//cette fonction retourne S1
     
    	void encrypte(char *text,char cipher[32],char *K)
    {
    //code
    }
    J'obtiens de la fonction S1 =
    S1=Ah±§²`,çeEï↨ê‼&y)F,[6fo.W

    Se pourrait il alors que le probleme vient de encrypte ?
    Pourtant cette fonction retourne S1 avec 32 valeurs ...

Discussions similaires

  1. Conversion byte[] vers ASCII étendu
    Par midou256 dans le forum C#
    Réponses: 2
    Dernier message: 16/08/2013, 10h36
  2. Réponses: 3
    Dernier message: 15/06/2007, 14h53
  3. code ascii en binaire -> caractere
    Par mzt.insat dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 19/04/2005, 15h43
  4. [C#] Conversion d'un byte[] en byte *
    Par karsh dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/12/2004, 10h53
  5. [Delphi] Application "console" et caractères ASCII
    Par Yorys dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/07/2003, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo