在C#中是否有任何内置方法将整数转换为字符串(任何基数)?
时间:2020-03-06 14:22:41 来源:igfitidea点击:
由于某些奇怪的原因,Convert.ToString()仅允许使用2、8、10和16的基本值。是否有某种晦涩的方式可以提供2到16之间的基数?
解决方案
string foo = Convert.ToString(myint,base);
http://msdn.microsoft.com/en-us/library/14kwkz77.aspx
编辑:我不好,除非我们传入指定的基数(2、8、10和16),否则这将引发参数异常。
如果我们想使用其他基准,则可能是SOL(但是为什么???)。
我们可以尝试http://www.codeproject.com/KB/macros/Convert.aspx。
我们可以尝试以下方法:
http://www.dotnetspider.com/resources/938-Conversion-Decimal-number-any-Base-vice.aspx
至少给人的印象是我们可以有任何底数(从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 }
抱歉,我没有回答问题,但是...
碱的选择不是任意的。pc不断地从2进制(它的内部二进制系统)转换为人类可读的10进制。8和16进制非常容易在2进制之间进行转换,并且经常使用,因此计算机和人都可以读取该值(例如GUID)