Domanda

Sto cercando di convertire una puntura in entrata di 1 e 0 da stdin nei rispettivi valori binari (dove una stringa come "11110111" verrà convertita in 0xF7). Questo sembra piuttosto banale ma non voglio reinventare la ruota, quindi mi chiedo se c'è qualcosa nelle librerie standard C / C ++ che può già eseguire un'operazione del genere?

È stato utile?

Soluzione

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

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

Per numeri più grandi, esiste una versione long long , strtoll .

Altri suggerimenti

Puoi usare std :: bitset (se allora la lunghezza dei tuoi bit è nota al momento della compilazione)
Anche se con qualche programma potresti dividerlo in pezzi e combinarli.

#include <bitset>
#include <iostream>

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

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

Puoi usare strtol

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

Puoi usare Boost Dynamic Bitset:

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

Ho scritto alcune funzioni per questo e concesso in licenza sotto LGPL. Puoi trovare qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top