printf系関数を使っても、標準ストリームのマニピュレータを使っても、8進数、10進数、16進数に変換することはできても、2進数に変換することはできません(処理系の独自拡張で変換できることはあります)。しかし、std::bisetクラステンプレートを使えば簡単に変換することができます。
0 1 2 3 4 5 6 7 8 9 |
#include <iostream> #include <bitset> int main() { unsigned long value = 1234; std::cout << std::bitset<32>(value) << std::endl; } |
上記のサンプルでは標準出力に直接出力していますが、変換結果を文字列として欲しいのであれば、次のようにすることができます。
0 1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <bitset> #include <string> int main() { unsigned long value = 1234; std::string str(std::bitset<32>(value).to_string<char, std::char_traits<char>, std::allocator<char> >()); } |
上のサンプルを見ても分かるように、to_string メンバ関数を呼び出すときはテンプレート実引数を指定しなければならず、かなり面倒です。std::ostringstreamを使う方が簡単かもしれません。
0 1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <bitset> #include <sstream> int main() { unsigned long value = 1234; std::ostringstream oss; oss << std::bitset<32>(value); } |
C++11からはstd::bitsetも少し改良されているので、使い勝手がずっとよくなりました。
0 1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <bitset> #include <string> int main() { unsigned long value = 1234; std::string str(std::bitset<32>(value).to_string()); } |
wchar_t型の文字列も簡単に取得できます。
0 1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <bitset> #include <string> int main() { unsigned long value = 1234; std::wstring str(std::bitset<32>(value).to_string<wchar_t>()); } |
同様にして、char16_t型、char32_t型、char8_t型の文字列も取得することができます。