Convertendo seqüência de 1s e 0s em valor binário
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?
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 .