読者です 読者をやめる 読者になる 読者になる

整数を、任意の基数の文字列に変換する

除算と剰余で作れる。テーブルを拡張すれば何進数でもいける。

#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