Convertendo string de 1s e 0s em valor binário

Eu estou tentando converter uma picada de input de 1s e 0s de stdin em seus respectivos valores binários (onde uma seqüência de caracteres como “11110111” seria convertida em 0xF7). Isso parece bastante trivial, mas eu não quero reinventar a roda, então eu estou querendo saber se há alguma coisa nas bibliotecas padrão C / C ++ que já podem realizar tal operação?

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

Para números maiores, há uma versão long long , strtoll .

Você pode usar std :: bitset (se o comprimento dos seus bits for conhecido em tempo de compilation)
Embora com algum programa você pode dividi-lo em pedaços e combinar.

 #include  #include  int main() { std::bitset<5> x(std::string("01011")); std::cout << x << ":" << x.to_ulong() << std::endl; } 

Você pode usar strtol

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

Você pode usar o Boost Dynamic Bitset:

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

Eu escrevi algumas funções para isso e licenciado sob LGPL. Pode ser encontrado aqui .