将1和0的字符串转换为二进制值

时间:2020-03-06 14:34:03  来源:igfitidea点击:

我正在尝试将传入的1和0的字符串从stdin转换为它们各自的二进制值(其中,诸如" 11110111"之类的字符串将转换为0xF7)。这看似微不足道,但我不想重蹈覆辙,所以我想知道C / C ++标准库中是否有已经可以执行这种操作的东西?

解决方案

我们可以使用strtol

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

#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;
}

我们可以使用Boost Dynamic Bitset:

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