Convirtiendo cadenas de 1s y 0s en valores binarios

Estoy tratando de convertir un sting entrante de 1s y 0s de stdin en sus respectivos valores binarios (donde una cadena como “11110111” se convertiría a 0xF7). Esto parece bastante trivial, pero no quiero reinventar la rueda, así que me pregunto si hay algo en las librerías estándar de C / C ++ que ya pueda realizar esa operación.

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

Para números más grandes, hay una versión long long , strtoll .

Puede usar std :: bitset (si la longitud de sus bits se conoce en tiempo de comstackción)
Aunque con algún progtwig podrías dividirlo en pedazos y combinarlo.

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

Puedes usar strtol

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

Puede usar Boost Dynamic Bitset:

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

He escrito algunas funciones para esto y tengo licencia bajo LGPL. Puede ser encontrado aquí .