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 :

convertir chaine de caractère binaire en chaine de caractère décimale


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut convertir chaine de caractère binaire en chaine de caractère décimale
    Bonjour,

    comme l'indique le sujet de mon post je souhaiterais convertir une chaine de caractère binaire en chaine de caractère décimale de sorte à ce que :

    "0000000000000010" devienne "2"

    Je souhaiterais cependant ne pas passer par des conversions de cette chaine binaire en nombre entier puis en chaine puisque le but étant de pouvoir représenter des nombres extrêmement grands (500000 bits par exemple...)

    Je peine à utiliser les stringstream avec les différents flags, si vous pouviez me donner un coup de main,

    merci d'avance,
    jav974

  2. #2
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Puisqu'il s'agit d'une transformation chaine vers chaine, la meilleur solution qui me vient pour l'instant est l’implémentation d'un boost::iostreams::filter, et plus spécialement d'un SymmetricFilter:
    http://www.boost.org/doc/libs/1_51_0...doc/index.html

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci Nogane,

    mais je souhaiterais éviter d'avoir à utiliser boost pour faire ce travail, n'y aurait-il pas une façon maison de le faire ?

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    @Nogane, il faut m'expliquer pourquoi plus en detail, parce que moi je ne vois pas.

    @jav974, dans la transformation de binaire en decimal, chaque chiffre decimal du resultat dépend de tous les chiffres de la donnee. Si tu veux reellement faire ca sur 500000 bits, je te conseillerais l'utilisation d'une lib comme gmp.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Peut-être std::bitset, qui peut gérer simplement ce type de conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::bitset<32> bs(std::string("0000000000000000000010")); //32bits
    std::cout << bs.to_ulong() << std::endl; // affiche '2'
    Par contre, oui, 500000bits ça risque de faire beaucoup.

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Par contre, oui, 500000bits ça risque de faire beaucoup
    C'est juste jusque 10.24^150000.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    @Nogane, il faut m'expliquer pourquoi plus en detail, parce que moi je ne vois pas.

    @jav974, dans la transformation de binaire en decimal, chaque chiffre decimal du resultat dépend de tous les chiffres de la donnee. Si tu veux reellement faire ca sur 500000 bits, je te conseillerais l'utilisation d'une lib comme gmp.
    arf, je n'avais pas vraiment réalisé la complexité de la chose... Bah du coup j'ai pas d'idée là, à par gmp.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je suis en train de coder une sorte de gmp pour ainsi dire, du coup si je pouvais ne pas passer par la ^^'

    :/

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Je comprends pas ton objectif. Si tu veux initialiser un objet de ta classe à partir d'une représentation binaire, c'est trivial si ta représentation interne est binaire. Si elle ne l'est pas, tu multiplies et tu additionnes.

    (En passant, si tu as réellement des nombres de 500000 bits à manipuler et que tu as besoin de ce genre de conseil, mon conseil c'est d'utiliser gmp, tu ne vas pas arriver à avoir qqch d'efficace.)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Mon objectif n'est pas d'initialiser ma classe avec, mais simplement d'afficher son contenu en décimal. J'ai résolu mon problème en utilisant un petit d'algo d'addition / multiplication sur chaine, c'est ok maintenant merci quand même

  11. #11
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    J'ai l'impression que tu batis une usine a gaz. Je ne vois pas d'ou peut venir ta chaine contenant une representation binaire si ton objectif final est d'afficher en decimal.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #12
    screetch
    Invité(e)
    Par défaut
    surtout si tu stockes un grand nombre en tant que chaine contenant des 0 et des 1, soit un octet par bit, tu n'utilises pas optimalement la mémoire...

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    je ne stocke pas un octet par bit, j'ai un champs de bit, la chaine binaire je la genere en lisant les bits de me champs un par un, et c'est a partir de cette représentation sous chaine de caractère binaire que je souhaitais calculer la représentation décimale. Le lien que j'avais posté a été supprimé, sinon je vous aurais invité à lire mon code ...
    Les opérations que je réalise dans ma classe sont sur des champs de bits, la représentation décimale ne me sert qu'à afficher pour l'utilisateur la valeur stockée dans le champs de bit. Il ne s'agit donc pas d'une usine à gaz ^^'

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    A vrai dire je ne souhaitais pas non plus traiter une chaine binaire, en interne j'accède directement aux bits de mon champs pour calculer cette représentation décimale, mais je précisais chaine de caractère binaire dans mon post pour généraliser le problème.

  15. #15
    screetch
    Invité(e)
    Par défaut
    dakodak, c'est beaucoup plus efficace comme ca, ca me rassure

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut


    j'ai développé cette classe à titre purement personnel, n'ayant jamais eu à manipuler les opérateurs binaires je voulais m'y essayer. Mon code est dispo sur codes-sources si vous voulez y jeter un coup d'oeil, dans la rubrique cpp/math au titre de BITSET CPP etc..

    Ca m'intéresserait beaucoup d'avoir un retour sur ce que j'ai fait, afin de m'améliorer et en apprendre plus sur la manipulation binaire..

    merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/11/2011, 19h55
  2. Convertir un entier en binaire (chaine)
    Par hpalpha dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/02/2011, 17h20
  3. Réponses: 1
    Dernier message: 01/02/2008, 17h03
  4. Réponses: 8
    Dernier message: 08/06/2004, 01h29

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