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? (为什么他们不给的选项呢?......)

+3

实现它自己,这不是太硬 – harold

+0

@harold以及它心不是。但我希望unknwon(由我)解决方案 –

+2

0x10 == 16(十六进制数字),所以第四_is_那里 – Attila

从这个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; 
}