Pergunta

Eu estou tentando converter uma picada de entrada de 1s e 0s do stdin em seus respectivos valores binários (onde uma string como "11110111" seria convertido para 0xF7). Isso parece bastante trivial, mas eu não quero reinventar a roda, então eu estou querendo saber se há alguma coisa nas / C ++ libs C padrão que já pode realizar tal operação?

Foi útil?

Solução

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

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

Para números maiores, há como uma versão long long, strtoll.

Outras dicas

Você pode usar std :: bitset (se, em seguida, o comprimento de seus bits é conhecido em tempo de compilação)
Embora com algum programa que você pode dividi-lo em pedaços e misture.

#include <bitset>
#include <iostream>

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

    std::cout << x << ":" << x.to_ulong() << std::endl;
}

Você pode usar strtol

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

Você pode usar o Reforço Dinâmico bitset:

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

Eu escrevi algumas funções para este e licenciado sob a LGPL. Pode ser encontrada aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top