Convert.ToInt32只支持4个基地?
问题描述:
我想转换12122
(基3)int
值,Convert.ToInt32只支持4个基地?
但是我看到反射器 - 支持的基础是2,8,10,16
public static int ToInt32(string value, int fromBase)
{
if (((fromBase != 2) && (fromBase != 8)) && ((fromBase != 10) && (fromBase != 0x10)))
{
throw new ArgumentException(Environment.GetResourceString("Arg_InvalidBase"));
}
return ParseNumbers.StringToInt(value, fromBase, 0x1000);
}
(我认为他们错过了2-8之间的4,但从来没有......)
那么,我该如何将基地3转换为基地10? (为什么他们不给的选项呢?......)
答
从这个link
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;
}
使用像下面
string binary = IntToString(42, new char[] { '0', '1' });
string base3 = IntToString(42, new char[] { '0', '1', '2' });
// 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'});
答
这应该与1和9与正极和INT的范围之间的碱基工作...
如有必要
还要添加一些验证int ConvertToInt(int number, int fromBase)
{
// Perform validations if necessary
double result = 0;
int digitIndex = 0;
while (number > 0)
{
result += (number % 10) * Math.Pow(fromBase, digitIndex);
digitIndex++;
number /= 10;
}
return (int)result;
}
答
在.NET中没有任何东西。
你可以使用这个(未经测试)
static int ParseIntBase3(string s)
{
int res = 0;
for (int i = 0; i < s.Length; i++)
{
res = 3 * res + s[i] - '0';
}
return res;
}
实现它自己,这不是太硬 – harold
@harold以及它心不是。但我希望unknwon(由我)解决方案 –
0x10 == 16(十六进制数字),所以第四_is_那里 – Attila