Convert.ToString()只允许使用2、8、10和16进制的基值,这似乎很奇怪;是否有一些不常见的方法可以提供2到16之间的任何进制?
可能是为了避免有人将7打成8,因为使用任意进制的情况很少(但并非不存在)。
这里有一个可以进行任意进制转换的示例方法。如果您愿意,可以使用它,没有任何限制。
string ConvertToBase(int value, int toBase)
{
if (toBase < 2 || toBase > 36) throw new ArgumentException("toBase");
if (value < 0) throw new ArgumentException("value");
if (value == 0) return "0"; //0 would skip while loop
string AlphaCodes = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string retVal = "";
while (value > 0)
{
retVal = AlphaCodes[value % toBase] + retVal;
value /= toBase;
}
return retVal;
}
//untested -- public domain
// if you do a lot of conversions, using StringBuilder will be
// much, much more efficient with memory and time than using string
// alone.
string toStringWithBase(int number, int base)
{
if(0==number) //handle corner case
return "0";
if(base < 2)
return "ERROR: Base less than 2";
StringBuilder buffer = new StringBuilder();
bool negative = (number < 0) ? true : false;
if(negative)
{
number=-number;
buffer.Append('-');
}
int digits=0;
int factor=1;
int runningTotal=number;
while(number > 0)
{
number = number/base;
digits++;
factor*=base;
}
factor = factor/base;
while(factor >= 1)
{
int remainder = (number/factor) % base;
Char out = '0'+remainder;
if(remainder > 9)
out = 'A' + remainder - 10;
buffer.Append(out);
factor = factor/base;
}
return buffer.ToString
}
string foo = Convert.ToString(myint,base);
http://msdn.microsoft.com/en-us/library/14kwkz77.aspx
编辑:我的错,除非您传入指定的进制(2、8、10和16),否则这将引发参数异常。
如果您想使用不同的进制,那么您可能会遇到困难(但为什么要这样做呢?)。