Frage

Ich versuche, aus einem eingehenden Stachel 1 und 0 zu konvertieren stdin in ihre jeweiligen binären Werte (wo eine Zeichenkette wie „11110111“ zu 0xF7 umgewandelt werden würde). Das scheint ziemlich trivial, aber ich will nicht das Rad neu erfinden, so frage ich mich, ob es etwas in den C / C ++ Standard Libs ist, die eine solche Operation bereits durchführen kann?

War es hilfreich?

Lösung

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

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

Für größere Zahlen gibt als long long Version, strtoll.

Andere Tipps

Sie können mit std :: bitset (wenn dann der Dauer des Bits wird bei der Kompilierung bekannt)
Obwohl mit einigen Programm könnte es brechen in Stücke und kombinieren.

#include <bitset>
#include <iostream>

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

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

Sie können mit strtol

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

Sie können mit Boost Mit Dynamic Bitset:

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

Ich habe geschrieben, ein paar Funktionen für diese und unter LGPL lizenziert. Kann hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top