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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    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
    Membre averti
    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
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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.

  5. #5
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    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.

  6. #6
    Membre averti
    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
    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 ^^'

    :/

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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.)

  8. #8
    Membre émérite

    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
    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.

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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.

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