0

并不是说工作量很大,但是我知道将非十进制转换为另一个非十进制的唯一方法是先将数字转换为十进制,然后再采取第二步将其转换为新的基数。例如,要将 456(以 7 为基数)转换为 567(以 8 为基数),我将计算 456 的十进制值,然后将该值转换为以 8 为基数...

有没有更好的方法直接从7点到8点?或任何其他基地的基地?

这是我所拥有的:


   //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;
    }
4

1 回答 1

8

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

IMO,这似乎是一个明智的选择。但是,您的转换例程肯定不是特别有效。我会将您的代码分成ParseFormat方法,然后该Convert方法可以是:

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

(当然,如果需要,您可以使用 astring来表示不同的基数。如果您确实需要这种灵活性,我很想创建一个新类来表示“数字表示”。该类可能应该是拥有的ParseFormatConvert在其中。)

于 2009-09-01T06:42:44.397 回答