【问题标题】:Convert.ToInt32 supports only 4 bases?Convert.ToInt32 只支持 4 个碱基?
【发布时间】:2012-05-19 02:51:52
【问题描述】:

我正在尝试将 12122(基数 3)转换为 int 值,

但是我在反射器中看到 - 支持的基础是 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? (为什么他们还是不给选项?...)

【问题讨论】:

  • 自己实现,不会太难
  • 0x10==16(十六进制数),所以第四个那里
  • “他们为什么不给选项呢?” - 好吧,你真的有base-3的数据吗?如果是这样,为什么???
  • @HenkHolterman 我们的工作中有开关。每个可以有 3 个状态....这是它开始的地方....我们正在保存 int 值...并且需要返回....(真的,为什么我拥有它很重要?我只是有它...在我开始在这里工作之前就开始了:))
  • @HenkHolterman 再次,保存字段是 int。 (历史问题...),还要考虑以 10 为底的 9999 ,以 2 为底的它将是“10011100001111” - 所以你的解决方案保存为字符串效率不高

标签: c# .net int converter type-conversion


【解决方案1】:

来自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'});

【讨论】:

    【解决方案2】:

    这应该适用于 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;
        }
    

    【讨论】:

      【解决方案3】:

      .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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 2019-10-12
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多