除算と剰余で作れる。テーブルを拡張すれば何進数でもいける。
#include <iostream> #include <cassert> #include <string> #include <sstream> template <class Integer> std::string to_base_string(Integer x, int base) { assert(base >= 2 && base <= 16); if (x == 0) return "0"; const std::string table = "0123456789abcdef"; std::string result; Integer y = x; do { Integer div = y / base; Integer mod = y % base; result = table[mod] + result; y = div; } while (y != 0); return result; } int main() { std::cout << to_base_string(254, 2) << std::endl; std::cout << to_base_string(9, 8) << std::endl; std::cout << to_base_string(254, 16) << std::endl; }
出力:
11111110 11 fe