大変な作業というわけではありませんが、非 10 進数を別の非 10 進数に変換する唯一の方法は、最初に数値を 10 進数に変換し、次に 2 番目の手順で新しい基数に変換することです。たとえば、456 (基数 7) を 567 (基数 8) に変換するには、456 の 10 進値を計算し、その値を基数 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;
}