Convert.ToString
可用于将数字转换为指定基数下的字符串表示形式。
示例:
string binary = Convert.ToString(5, 2)
Console.WriteLine(binary)
然而,正如评论所指出的那样,Convert.ToString仅支持以下有限但通常足够的一组进制:2、8、10或16。
更新(以满足转换为任何基数的要求):
我不知道BCL中是否有任何方法能够将数字转换为任何基数,因此您需要编写自己的小型实用程序函数。一个简单的示例如下(请注意,通过替换字符串连接,这肯定可以更快):
class Program
{
static void Main(string[] args)
{
string binary = IntToString(42, new char[] { '0', '1' });
string hex = IntToString(42,
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'});
string hexavigesimal = IntToString(42,
Enumerable.Range('A', 26).Select(x => (char)x).ToArray());
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;
}
public static string IntToStringFast(int value, char[] baseChars)
{
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
将更快。
result = baseChars[value % targetBase] + result;
替换为result = baseChars[--value % targetBase] + result;
。由于我只需要将列号转换为Excel列名,因此我没有测试其他情况。 - FercoCQ