c ++ шаблон для преобразования между десятичной и произвольной базой - PullRequest
2 голосов
/ 15 января 2012

Существует ли структура или шаблон c ++ (в любой библиотеке), который позволяет мне выполнять преобразование между десятичной и любой другой базой (во многом подобно тому, что может делать набор битов)?

1 Ответ

5 голосов
/ 15 января 2012

Да, вы можете использовать unsigned int:

unsigned int n =   16; // decimal input
unsigned int m = 0xFF; // hexadecimal input

std::cout << std::dec << "Decimal: " << n << ", " << m << std::endl;
std::cout << std::hex << "Hexadecimal: 0x" << n << ", 0x" << m << std::endl;

Также поддерживается Octal, хотя для других баз вам лучше всего написать собственный алгоритм - по сути, это три строки в C ++:

std::string to_base(unsigned int n, unsigned int base)
{
    static const char alphabet[] = "0123456789ABCDEFGHI";
    std::string result;
    while(n) { result += alphabet[n % base]; n /= base; }
    return std::string(result.rbegin(), result.rend());
}

Обратная функция unsigned int from_base(std::string, unsigned int base) аналогична.

...