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

gro*_*uro 19 c c++ binary

我正在尝试将来自stdin的1和0的传入sting转换为它们各自的二进制值(其中诸如"11110111"的字符串将被转换为0xF7).这看起来非常简单,但我不想重新发明轮子,所以我想知道C/C++标准库中是否有任何可以执行此类操作的内容?

jkr*_*mer 34

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char * ptr;
    long parsed = strtol("11110111", & ptr, 2);
    printf("%lX\n", parsed);
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*ork 14

你可以使用std :: bitset(如果编译时知道你的位长度)
虽然有一些程序你可以将它分解成块并组合.

#include <bitset>
#include <iostream>

int main()
{
    std::bitset<5>  x(std::string("01011"));

    std::cout << x << ":" << x.to_ulong() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)


Tor*_*ack 9

你可以使用strtol

char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 6

您可以使用Boost Dynamic Bitset:

boost::dynamic_bitset<>  x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
Run Code Online (Sandbox Code Playgroud)