Convert.ToString
dapat digunakan untuk mengubah angka menjadi representasi string ekuivalennya dalam basis yang ditentukan.
Contoh:
string binary = Convert.ToString(5, 2); // convert 5 to its binary representation
Console.WriteLine(binary); // prints 101
Namun, seperti yang ditunjukkan oleh komentar, Convert.ToString
hanya mendukung set basis terbatas berikut - tetapi biasanya cukup -: 2, 8, 10, atau 16.
Perbarui (untuk memenuhi persyaratan untuk mengonversi ke basis mana pun):
Saya tidak mengetahui metode apa pun di BCL yang mampu mengonversi angka menjadi basis apa pun sehingga Anda harus menulis fungsi utilitas kecil Anda sendiri. Contoh sederhana akan terlihat seperti itu (perhatikan bahwa ini pasti dapat dibuat lebih cepat dengan mengganti rangkaian 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);
}
}
Perbarui 2 (Peningkatan Kinerja)
Menggunakan buffer array sebagai ganti penggabungan string untuk membangun string hasil memberikan peningkatan kinerja terutama pada jumlah yang besar (lihat metode IntToStringFast
). Dalam kasus terbaik (yaitu masukan terpanjang mungkin) metode ini kira-kira tiga kali lebih cepat. Namun, untuk angka 1 digit (yaitu 1 digit di basis target), IntToString
akan lebih cepat.