質問
標準入力から受信した 1 と 0 の文字列をそれぞれのバイナリ値に変換しようとしています (「11110111」などの文字列は 0xF7 に変換されます)。これは非常に簡単なことのように思えますが、車輪の再発明はしたくないので、C/C++ 標準ライブラリにすでにそのような操作を実行できるものがあるかどうか疑問に思っています。
解決
#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
.
他のヒント
std::bitset を使用できます(コンパイル時にビットの長さがわかっている場合)
ただし、プログラムによっては、それをいくつかのチャンクに分割して結合することもできます。
#include <bitset>
#include <iostream>
int main()
{
std::bitset<5> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
}
ストトールを使用できます
char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
Boost Dynamic Bitset を使用できます。
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
このためにいくつかの関数を作成し、LGPL に基づいてライセンスを取得しました。見つかる ここ.
所属していません StackOverflow