Convert.ToString
pode ser usado para converter um número em sua representação de string equivalente em uma base especificada.
Exemplo:
string binary = Convert.ToString(5, 2); // convert 5 to its binary representation
Console.WriteLine(binary); // prints 101
No entanto, como apontado pelos comentários, Convert.ToString
suporta apenas o seguinte conjunto limitado - mas normalmente suficiente - de bases: 2, 8, 10 ou 16.
Atualização (para atender ao requisito de conversão para qualquer base):
Não estou ciente de nenhum método no BCL que seja capaz de converter números em qualquer base, então você teria que escrever sua própria função de utilidade pequena. Um exemplo simples ficaria assim (observe que isso certamente pode ser feito mais rápido substituindo a concatenação de string):
class Program
{
static void Main(string[] args)
{
// convert to binary
string binary = IntToString(42, new char[] { '0', '1' });
// convert to hexadecimal
string hex = IntToString(42,
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'});
// convert to hexavigesimal (base 26, A-Z)
string hexavigesimal = IntToString(42,
Enumerable.Range('A', 26).Select(x => (char)x).ToArray());
// convert to sexagesimal
string xx = IntToString(42,
new char[] { '0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'});
}
public static string IntToString(int value, char[] baseChars)
{
string result = string.Empty;
int targetBase = baseChars.Length;
do
{
result = baseChars[value % targetBase] + result;
value = value / targetBase;
}
while (value > 0);
return result;
}
/// <summary>
/// An optimized method using an array as buffer instead of
/// string concatenation. This is faster for return values having
/// a length > 1.
/// </summary>
public static string IntToStringFast(int value, char[] baseChars)
{
// 32 is the worst cast buffer size for base 2 and int.MaxValue
int i = 32;
char[] buffer = new char[i];
int targetBase= baseChars.Length;
do
{
buffer[--i] = baseChars[value % targetBase];
value = value / targetBase;
}
while (value > 0);
char[] result = new char[32 - i];
Array.Copy(buffer, i, result, 0, 32 - i);
return new string(result);
}
}
Atualização 2 (melhoria de desempenho)
Usar um buffer de array em vez de concatenação de string para construir a string de resultado fornece uma melhoria de desempenho, especialmente em grande número (consulte o método IntToStringFast
). No melhor caso (ou seja, a entrada mais longa possível), esse método é cerca de três vezes mais rápido. No entanto, para números de 1 dígito (ou seja, 1 dígito na base de destino), IntToString
será mais rápido.