由于某些奇怪的原因,Convert.ToString()只允许基数值为2,8,10和16;是否有一些不明确的方式提供2到16之间的任何基础?
答案 0 :(得分:5)
可能会消除某人输入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;
}
未经测试,但你应该能够从这里弄明白。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以尝试以下方法:
http://www.dotnetspider.com/resources/938-Conversion-Decimal-number-any-Base-vice.aspx
这至少给人的印象是你可以有任何基础(从2> 16)。虽然我有点困惑,为什么你想要!
答案 3 :(得分:0)
//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
}
答案 4 :(得分:0)
对不起,我没有回答你的问题,但...... 基础的选择不是任意的。你的电脑不断从基座2(它的内部二进制系统)转换到人类可读的基座10.基座8和16非常容易转换到基座2和从基座2转换,并且经常被使用,因此计算机和人类可以读取值(例如GUID)
答案 5 :(得分:-3)
string foo = Convert.ToString(myint,base);
http://msdn.microsoft.com/en-us/library/14kwkz77.aspx
编辑:我的不好,这会抛出一个参数异常,除非你传入指定的基数(2,8,10和16)
你可能是SOL,如果你想使用不同的基础(但为什么???)。