2016-08-22 3 views
1

私の現在の割り当ては、異なるシステムにコンバータを書き込むことです。 バイナリへの変換は問題ありませんでしたが、私は16進数でいくつかの問題を抱えています。ここに私のコードです:ベース変換ツールの作成と16進数の問題

public string[] ConvertInput(int pInput, int pBase) 
    { 
     List<string> Output = new List<string>(); 
     int Tmp = pInput; 
     int TmpBin; 

     for (int i = 0; Tmp > 0; i++) 
     { 
      TmpBin = Tmp % pBase; 
      Tmp = Tmp/pBase; 
      if (TmpBin >= 10) 
      { 
       char c = (char)TmpBin; 
       Output.Add(c.ToString()); 
      } 
      else 
      { 
       Output.Add(TmpBin.ToString()); 
      } 
     } 

     string[] OutArray = Output.ToArray(); 

     Array.Reverse(OutArray); 

     return OutArray; 
    } 

私は16進数に数15555を変換しようとするのであれば、それは3cc3バックを与える必要がありますが、何それがないと、3\f\f3を返すことです。

どうしたのですか?これに代えて

+0

バイナリ値をcharにキャストしています。バイナリ値を 'A'から 'F'の範囲の文字に正しく変換していません。 –

+0

ところで、あなたは文字列の配列を取り除くことができますし、ちょうど1つの文字列でそれをすべて行います。しかし、あなたは逆のストリングメソッドが必要になります。 http://stackoverflow.com/a/228060/49251を参照してください。ですから、出力宣言 'string Output =" "'でそれを行うことができます。 'Output + = c.ToString();'などで追加します。その後、文字列を参照してメソッドが文字列を返すようにします。 – DWright

+0

@Raphnika:あなたの質問を編集して最後に「ありがとう」を追加しているのを見ました。ここでの一般的なコンセンサスはあなたの投稿から何か「感謝」を省略することです。テクニカルライティングとしての質問と回答を考えてみましょう。厳しいように見えるかもしれませんが、意味がありません。適切なときに受諾または上書きすることにより、回答者に感謝します。 –

答えて

2

if (TmpBin >= 10) 
{ 
    char c = (char)TmpBin; 
    Output.Add(c.ToString()); 
} 

は、この操作を行います。あなたのバージョンでは

if (TmpBin >= 10) 
{ 
    char c = (char)('A' + (TmpBin - 10)); 
    Output.Add(c.ToString()); 
} 

を、あなたがキャスティングされている小数点が直接文字に、11、10 12などの値、および(例えば)コード10の文字は改行であり、'A'ではありません。

+0

Allright!とった。お世話になり、ありがとうございます。 – Raphnika

+1

私はこれが割り当てだったと知っていますが、実際の.NET制作アプリケーションでは、メソッド全体を '15555.ToString(" X ");'で置き換える必要があります。あなたの教授は恐らくそれを難し​​い方法でやろうと思っていますが、あなたはホイールを作り直したくないでしょう。 –

+0

@コーリーええと...彼は私たちがすべての仕組みが理解できるようにしたい。 – Raphnika

関連する問題