Convert.ToString
kann verwendet werden, um eine Zahl in ihre entsprechende Zeichenfolgendarstellung in einer angegebenen Basis zu konvertieren.
Beispiel:
string binary = Convert.ToString(5, 2); // convert 5 to its binary representation
Console.WriteLine(binary); // prints 101
Wie in den Kommentaren hervorgehoben, werden jedoch Convert.ToString
nur die folgenden begrenzten - aber normalerweise ausreichenden - Basissätze unterstützt: 2, 8, 10 oder 16.
Update (um die Anforderung zu erfüllen, auf eine beliebige Basis zu konvertieren):
Mir ist keine Methode in der BCL bekannt, mit der Zahlen in eine beliebige Basis konvertiert werden können, sodass Sie Ihre eigene kleine Dienstprogrammfunktion schreiben müssten. Ein einfaches Beispiel würde so aussehen (beachten Sie, dass dies sicherlich durch Ersetzen der Zeichenfolgenverkettung beschleunigt werden kann):
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);
}
}
Update 2 (Leistungsverbesserung)
Die Verwendung eines Array-Puffers anstelle der Verkettung von Zeichenfolgen zum Erstellen der Ergebniszeichenfolge führt zu einer Leistungsverbesserung, insbesondere bei großen Zahlen (siehe Methode IntToStringFast
). Im besten Fall (dh bei der längsten möglichen Eingabe) ist diese Methode ungefähr dreimal schneller. Bei 1-stelligen Zahlen (dh 1-stellig in der Zielbasis) ist IntToString
dies jedoch schneller.