题
我正在尝试将来自stdin的1和0的传入sting转换为它们各自的二进制值(其中诸如“11110111”的字符串将被转换为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;
不隶属于 StackOverflow