Pregunta

Estoy intentando convertir una picadura entrante de 1 y 0 de la entrada estándar en sus respectivos valores binarios (donde una cadena como "11110111" se convertiría a 0xF7).Esto parece bastante trivial, pero no quiero reinventar la rueda, así que me pregunto si hay algo en las bibliotecas estándar de C/C++ que ya pueda realizar tal operación.

¿Fue útil?

Solución

#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 mayores, existe como long long versión, strtoll.

Otros consejos

Puede usar std::bitset (si la longitud de sus bits se conoce en el momento de la compilación)
Aunque con algún programa puedes dividirlo en trozos y combinarlos.

#include <bitset>
#include <iostream>

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

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

puedes usar strtol

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

Puede utilizar Boost Dynamic Bitset:

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

Escribí algunas funciones para esto y obtuve la licencia LGPL.Puede ser encontrado aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top