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 :

Conversion binaire -> ASCII


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Conversion binaire -> ASCII
    COMMENT crée une fonction qui par exemple à partir du caractère codé en binaire 00001100 donne son code ASCII et inversement.

    ----------------------------------
    Titre édité par LFE
    Titre Original : [GROS SOUCIS EN C]
    Utiliser un titre explicite, Merci.

  2. #2
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    je dirais : en utilisant ton cerveau.

    problematique:
    transformer ta chaine en decimal => decimal passer à l'ascii.

    pour transformer une chaine binaire en decimal, il faut connaitre :
    - la longeur de la chaine
    - a quoi corresponde chaque 0 et 1

    pour passer du decimal à l'ascii, un simple printf("%c" ... ) devra suffir.

    Y A PLUS QU'A ....
    il y a du linge sur la corde à linge

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    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
    unsigned char    get_char_from_bin(char *bin)
    {
        int    i;
        int    d;
        unsigned char    res;
     
        d = 128;
        res = 0;
        for (i = 0; (i < 8) && bin[i]; i++)
        {
            if (bin[i] == '1')
                res += d;
            d /= 2;
        }
    	return (res);
    }
    ca donne environ ca pour un octets, a toi de cumuler si tu en as plusieurs dans la continuiter, ou inspire toi si ton utiliter est differente
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  4. #4
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    J'avais fait ça... j'ai pas retesté.
    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
    #include <assert>
    #include <limits.h>
    using namespace std ;
     
    static const int diff01 = '1'-'0'; //très probablement 1
     
    typedef int T; //tout type entier convient
     
    //convertit une chaîne binaire ('0' et '1') en sa valeur
    T strbin2val(const char *str){
    	T val= 0 ;
    	for( ; *str != '\0' ; ++str){
    		assert(*str=='0' || *str=='1') ; //piège à fool
    		val<<= 1 ;
    		val|= (*str - '0')/diff01 ; //0 ou 1 fois la différence
    	}
    	return val ;
    }
     
    //convertit une valeur en chaîne binaire ('0' et '1')
    void val2strbin(T val, char *const str){
    	int numbits= sizeof(T)*CHAR_BIT ;
     
    	char* to= str+numbits ;
    	*to= '\0' ;
    	while(--to >= str){
    		*to= '0' + (val&T(1))*diff01  ; //base + 0 ou 1 fois la différence
    		val>>= 1;
    	}
    }
     
    //convertit une valeur en sa représentation chaîne sous une base donnée
    //positif seulement
    void val2base(T value, int base, char* target){
    	assert(2<=base && base<=16);
    	do{
    		 *target++ = "01234567890ABCDEF"[value%base];
    	}while(value/= base);
    	*target= '\0';
    }
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    je comprend pas trop la :

    Citation Envoyé par Musaran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static const int diff01 = '1'-'0'
    si je ne m'abuse, une constante ne sera pas modifier, donc diff01 vaudras tout le temps 1...

    Citation Envoyé par Musaran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val |= (*str - '0') / diff01;
    inutile de diviser par 1

    Citation Envoyé par Musaran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *to = '0' + (val & T(1)) * diff01;
    inutile de multiplier par 1

    de plus, je ne saurais trop te conseiller delire la norme ANSI enfin il faudrais que tu soigne plus ton code, c'est la lecture facile de ton code qui te credibilisera aupres des ceux qui apprendront de toi, donc je te conseil de plus espacer ton code, genre des espace entre les variables et les operateurs pour commencer

    de plus, T etant un int, je ne sais pas ce que donne T(1), il est possible que cela donne quelque chose, mais je ne sais pas quoi, tu peux m'expliquer stp ?

    merci d'avance

    ps : il ne faut aps voir ici de critique, juste de bons conseils selon moi, mnt a toi de voir les choses comme tu souhaite les voirs
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  6. #6
    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
    Citation Envoyé par Fatalis
    je comprend pas trop la :

    Citation Envoyé par Musaran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static const int diff01 = '1'-'0'
    si je ne m'abuse, une constante ne sera pas modifier, donc diff01 vaudras tout le temps 1...

    Citation Envoyé par Musaran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val |= (*str - '0') / diff01;
    inutile de diviser par 1

    Citation Envoyé par Musaran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *to = '0' + (val & T(1)) * diff01;
    inutile de multiplier par 1
    L'interet d'utiliser la variable diff01 est tout simplement lier au fait que les caractres 1 et 0 ne sont pas forcement consecutif (c'est vrai dans la table ASCII, mais rien n'impose a un systeme d'utiliser la table ASCII pour coder les caracteres).
    Maintenant comme le fait remarquer Musaran c'est probablement 1 et tu peux te passer de diff01 si tu te moque que ton programme soit compatible avec la machine truc (disponible en 2 exemplaire) sur laquelle '0'=0x40 et '1'=0x55.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Decodage, quatre bit forme un chiffre hex, il te suffit de parcouris un arbre et le resultat tombe.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    heu, j'ai pas compris ton histoire d'arbre la, dsl
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  9. #9
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    diff01 vaudras tout le temps 1...
    Comme le dis gl ça n'est pas garanti.
    En tenir compte pour être portable à été un exercice de style pour moi.
    Si l'optimiseur fait son boulot c'est tout aussi performant qu'une version codée 'en dur'.

    enfin il faudrais que tu soigne plus ton code, c'est la lecture facile de ton code qui te credibilisera aupres des ceux qui apprendront de toi, donc je te conseil de plus espacer ton code, genre des espace entre les variables et les operateurs pour commencer
    J'ai une sale manie de tout tasser.
    Je corrige ça petit à petit, mais j'ai écrit ça il y a un certain temps.

    de plus, T etant un int, je ne sais pas ce que donne T(1), il est possible que cela donne quelque chose, mais je ne sais pas quoi, tu peux m'expliquer stp ?
    C'est (mal) adapté d'un template C++...
    'T(1)' en C++ se traduit au mieux par '(T)1' en C: 1 casté en type T.
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion chaînes binaires en ASCII sans LabVIEW
    Par menas dans le forum LabVIEW
    Réponses: 0
    Dernier message: 20/09/2012, 11h08
  2. Conversion binaire -> ASCII
    Par fearyourself dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 15h58
  3. conversion d'un ascii en binaire
    Par m0ul3sh0t dans le forum Débuter
    Réponses: 22
    Dernier message: 17/03/2008, 15h32
  4. Turing : conversion binaire -> baton
    Par DarK Sidious dans le forum Algorithmes et structures de données
    Réponses: 20
    Dernier message: 15/11/2005, 09h43
  5. Conversion binaire -> hexadecimal
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 06/08/2003, 10h40

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