将1和0的string转换为二进制值

我试图将来自stdin的1s和0s的入局sting转换成它们各自的二进制值(其中诸如“11110111”的string将被转换为0xF7)。 这似乎很微不足道,但我不想重新发明轮子,所以我想知道是否有什么在C / C ++标准库已经可以执行这样的操作?

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

对于更大的数字,有一个long long版本, strtoll

你可以使用std :: bitset(如果你的位的长度在编译时已知)
虽然有了一些程序,你可以把它分解成大块和结合起来。

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

你可以使用strtol

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

您可以使用Boost Dynamic Bitset:

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

我已经为此写了几个函数,并根据LGPL授权。 可以在这里find。