Convert.ToString
bir sayıyı belirli bir tabandaki eşdeğer dize gösterimine dönüştürmek için kullanılabilir.
Misal:
string binary = Convert.ToString(5, 2); // convert 5 to its binary representation
Console.WriteLine(binary); // prints 101
Bununla birlikte, yorumlarda belirtildiği gibi, Convert.ToString
yalnızca aşağıdaki sınırlı - ancak tipik olarak yeterli - temel setini destekler: 2, 8, 10 veya 16.
Güncelleme (herhangi bir tabana dönüştürme gereksinimini karşılamak için):
BCL'de sayıları herhangi bir tabana dönüştürebilen herhangi bir yöntemin farkında değilim, böylece kendi küçük yardımcı program işlevinizi yazmanız gerekir. Basit bir örnek şöyle görünecektir (bunun kesinlikle dize birleştirme değiştirilerek daha hızlı yapılabileceğini unutmayın):
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);
}
}
Güncelleme 2 (Performans İyileştirme)
Sonuç dizesini oluşturmak için dizi birleştirme yerine bir dizi tamponu kullanmak, özellikle büyük sayılarda bir performans artışı sağlar (yönteme bakın IntToStringFast
). En iyi durumda (yani mümkün olan en uzun girdi) bu yöntem kabaca üç kat daha hızlıdır. Bununla birlikte, 1 basamaklı sayılar için (yani hedef tabandaki 1 basamaklı) IntToString
daha hızlı olacaktır.