23

stdin からの 1 と 0 の着信文字列をそれぞれのバイナリ値に変換しようとしています (「11110111」などの文字列は 0xF7 に変換されます)。これはかなり些細なことのように思えますが、車輪を再発明したくないので、C/C++ 標準ライブラリにそのような操作を既に実行できるものがあるかどうか疑問に思っていますか?

4

5 に答える 5

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

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

より大きな数については、long longバージョンとしてstrtoll.

于 2008-09-22T21:50:56.410 に答える
14

std::bitset を使用できます(コンパイル時にビットの長さがわかっている場合)ただし、
一部のプログラムでは、それをチャンクに分割して組み合わせることができます。

#include <bitset>
#include <iostream>

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

    std::cout << x << ":" << x.to_ulong() << std::endl;
}
于 2008-09-22T22:28:12.920 に答える
10

あなたはstrtolを使うことができます

char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
于 2008-09-22T21:49:49.517 に答える
6

BoostDynamicBitsetを使用できます。

boost::dynamic_bitset<>  x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
于 2008-09-23T06:47:43.233 に答える