Convert.ToString
สามารถใช้เพื่อแปลงตัวเลขเป็นการแทนค่าสตริงที่เทียบเท่าในฐานที่ระบุ
ตัวอย่าง:
string binary = Convert.ToString(5, 2); // convert 5 to its binary representation
Console.WriteLine(binary); // prints 101
อย่างไรก็ตามตามที่ระบุไว้ในความคิดเห็นConvert.ToString
สนับสนุนเฉพาะชุดฐานที่ จำกัด ต่อไปนี้ แต่เพียงพอโดยทั่วไป: 2, 8, 10 หรือ 16
อัปเดต (เพื่อให้เป็นไปตามข้อกำหนดในการแปลงเป็นฐานใด ๆ ):
ฉันไม่ทราบวิธีการใด ๆ ใน BCL ที่สามารถแปลงตัวเลขเป็นฐานใด ๆ ได้ดังนั้นคุณจะต้องเขียนฟังก์ชันยูทิลิตี้ขนาดเล็กของคุณเอง ตัวอย่างง่ายๆจะมีลักษณะเช่นนั้น (โปรดทราบว่าสิ่งนี้สามารถทำได้เร็วขึ้นโดยการแทนที่การต่อสายอักขระ):
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);
}
}
อัปเดต 2 (การปรับปรุงประสิทธิภาพ)
การใช้อาร์เรย์บัฟเฟอร์แทนการต่อสายอักขระเพื่อสร้างสตริงผลลัพธ์จะช่วยปรับปรุงประสิทธิภาพโดยเฉพาะในจำนวนมาก (ดูวิธีการIntToStringFast
) ในกรณีที่ดีที่สุด (เช่นอินพุตที่ยาวที่สุด) วิธีนี้เร็วกว่าประมาณสามเท่า อย่างไรก็ตามสำหรับตัวเลข 1 หลัก (เช่น 1 หลักในฐานเป้าหมาย) IntToString
จะเร็วกว่า