Question

J'essaie de convertir une séquence entrante de 1 et de 0 de stdin en leurs valeurs binaires respectives (où une chaîne telle que "11110111" serait convertie en 0xF7). Cela semble assez trivial mais je ne veux pas réinventer la roue, donc je me demande s’il existe quelque chose dans la bibliothèque standard C / C ++ qui puisse déjà effectuer une telle opération?

Était-ce utile?

La solution

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char * ptr;
    long parsed = strtol("11110111", & ptr, 2);
    printf("%lX\n", parsed);
    return EXIT_SUCCESS;
}

Pour les grands nombres, il existe une version longue longue , strtoll .

Autres conseils

Vous pouvez utiliser std :: bitset (si la longueur de vos bits est connue au moment de la compilation)
Cependant, avec certains programmes, vous pouvez les diviser en morceaux et les combiner.

#include <bitset>
#include <iostream>

int main()
{
    std::bitset<5>  x(std::string("01011"));

    std::cout << x << ":" << x.to_ulong() << std::endl;
}

Vous pouvez utiliser strtol

char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);

Vous pouvez utiliser Boost Dynamic Bitset:

boost::dynamic_bitset<>  x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;

J'ai écrit quelques fonctions à ce sujet et obtenu une licence sous LGPL. Peut être trouvé ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top