Convert.ToString
peut être utilisé pour convertir un nombre en sa représentation sous forme de chaîne équivalente dans une base spécifiée.
Exemple:
string binary = Convert.ToString(5, 2); // convert 5 to its binary representation
Console.WriteLine(binary); // prints 101
Cependant, comme indiqué dans les commentaires, Convert.ToString
ne prend en charge que l'ensemble limité - mais généralement suffisant - de bases suivantes: 2, 8, 10 ou 16.
Mise à jour (pour répondre à l'exigence de conversion vers n'importe quelle base):
Je ne connais aucune méthode de la BCL capable de convertir des nombres en n'importe quelle base, vous devrez donc écrire votre propre petite fonction utilitaire. Un exemple simple ressemblerait à cela (notez que cela peut sûrement être rendu plus rapide en remplaçant la concaténation de chaînes):
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);
}
}
Mise à jour 2 (amélioration des performances)
L'utilisation d'un tampon de tableau au lieu de la concaténation de chaînes pour construire la chaîne de résultat améliore les performances, en particulier sur un grand nombre (voir méthode IntToStringFast
). Dans le meilleur des cas (c'est-à-dire la saisie la plus longue possible), cette méthode est environ trois fois plus rapide. Cependant, pour les nombres à 1 chiffre (c'est-à-dire 1 chiffre dans la base cible), IntToString
sera plus rapide.