Jeżeli możesz korzystać z C++17, to tu masz rozwiązanie. W mainie przeprowadziłem konwersję ze znanego kawału :) Spróbuj zmienić input_base, input_as_string oraz output_base ;)
Uruchom poniższy kod na godbolt.org
#include <array>
#include <charconv>
#include <iostream>
#include <string>
std::string itos(int value, int base = 10)
{
std::array<char, 128> output_as_characters;
auto result = std::to_chars(
std::begin(output_as_characters),
std::end(output_as_characters),
value,
base
);
return std::string(
std::begin(output_as_characters),
result.ptr - std::begin(output_as_characters)
);
}
int main()
{
std::cout << "Why do programmers always mix up Halloween and Christmas?" << "\n";
int input_base = 8; // octal
std::string input_as_string = "31";
int number_as_int = std::stoi(input_as_string, nullptr, input_base);
int output_base = 10; // decimal
std::string output_as_string = itos(number_as_int, output_base);
std::cout << "Because Oct " << input_as_string << " = Dec " << output_as_string << "." << "\n";
std::cout << input_as_string << "[" << input_base << "] = " << output_as_string << "[" << output_base << "]" << "\n";
}