代码之家  ›  专栏  ›  技术社区  ›  Haoest

将非十进制数转换为另一个非十进制数

  •  0
  • Haoest  · 技术社区  · 15 年前

    以下是我所拥有的:

    
       //source_lang and target_lang are just the numeric symbols, they would be "0123456789" if they were decimal, and "0123456789abcdef" if hex.
       private string translate(string num, string source_lang, string target_lang)
        {
            int b10 = 0;
            string rv = "";
            for (int i=num.Length-1; i>=0; i--){
                b10 += source_lang.IndexOf( num[i] ) * ((int)Math.Pow(source_lang.Length, num.Length -1 - i));
            }
            while (b10 > 0) {
                rv = target_lang[b10 % target_lang.Length] + rv;
                b10 /= target_lang.Length;
            }
            return rv;
        }
    
    1 回复  |  直到 11 年前
        1
  •  8
  •   Jon Skeet    15 年前

    你不是真的在转换成10垒。您正在将其转换为数字数据类型,而不是字符串表示形式。如果有什么区别的话,你要把它转换成二进制:)它值得区分“整数”(本质上没有基数)和“整数的文本表示”(有基数)。

    依我看,这似乎是一个明智的做法。然而,您的转换例程肯定不是特别有效。我会把你的代码分成 Parse Format 方法,然后 Convert 方法可以类似于:

    public static string Convert(string text, int sourceBase, int targetBase)
    {
        int number = Parse(text, sourceBase);
        return Format(number, targetBase);
    }
    

    (你可以使用 string 当然,如果您愿意,可以表示不同的基。如果您真的需要这种灵活性,我会尝试创建一个新类来表示“数值表示”。那门课应该是最好的 作语法分析 , 转换 在里面。)