2012-03-04 8 views
4

C#でベース変換を行う準備ができましたか?私はベース26からベース27の数字をベース10に変換しようとしています。私は紙でそれを行うことができますが、私は経験豊富なプログラマーではなく、可能であればゼロからそれをやりません。ありがとう!C#でbase-27(またはbase-X)をbase-10に変換しますか?

+1

「何を試しましたか」 (詳細が議論され、努力が実証されたので、完全に動作していなくても試みることが望ましい) –

+0

また、*既存の* base64エンコーダ/デコーダを検討することを検討する。数学ではわずかに異なる数字( '/'や '% 'の代わりに64、'/'や'%'などで27など)が考えられますが、そのアイデアは同じです。 –

+0

pst:何かが存在する場合、私はそれを書く必要はないので、まだ何も試していません。どのような方法でも完成したコードを求めているわけではありません。ありがとう! – miltonjbradley

答えて

3

数字2、8または16を基数10(Convert.ToInt32)に変換する既成の関数があります。ベース26またはベース27からベース10に変換する場合は、自分で行う必要があります。

は今、私はベース26個の数字のことを聞いたことがないので、私はただ「数字」はZに(0の値を持つ、そしてZは、25の10進値を持つ)されていると仮定するつもりです。 10をベースにベース26から変換するには、次の作業を行う必要があります

string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
int GetDigitValue(char digit) 
{ 
    return charset.IndexOf(digit); 
} 
int ConvertFromBase26(string number) 
{ 
    int result = 0; 
    foreach(char digit in number) 
     result = result * charset.Length + GetDigitValue(digit); 

    return result; 
} 

ちょうど26

注意を表しどんなキャラクター追加、ベース27から変換するには:(あなたが文字列を変換することができますエラー訂正はありません"$#$ @#$ @")、GetDigitValueはかなり効率的ではなく、これらの変換をたくさん行う予定の場合はルックアップテーブルに置き換える必要があります。

EDIT:ちょうどキックのためのLINQバージョン。

文字列が正当な数字のみで構成されていると仮定すると、効率的な検索とエラー修正はありません。

string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
int ConvertFromBase(string charset, string number) 
{ 
    return number.Select(c=>charset.IndexOf(c)).Aggregate(0, (x, y) => x*charset.Length +y); 
} 

私は最初のバージョンが読みやすくなっていると思います。

+0

今、私はLINQ式でこれを行うことができますか? – zmbq

+0

はい、私は答えを編集しました。 – zmbq

+0

技術的には、 'Convert.ToInt32'は数値を基数2に変換します。基数10に変換するのは' Int32.ToString'です。 – dan04

0

あなたの答えを書き留めてください。 charのASCII値を使うことができるので、charsetルックアップリストは必要ありません。

int ConvertFromBase26(string number) 
{ 
    return number.Select(digit => (int)digit - 64).Aggregate(0, (x, y) => x * 26 + y); 
} 

私は、Excelでプログラミングしながら、中にintに列stringアドレスを変換するために、これを使用していました。

関連する問題