2016-03-30 9 views
1

私は、私のループコードのfoの結果を表示するには問題があり、これは私のコードどのようにC#でテキストボックスに各ループを表示できますか?

private int n = 689; 
    private int e = 41; 
    private int d = 137; 

    public void enkrip() 
    { 
     string text = "indra"; 

     byte[] asciiBytes = Encoding.ASCII.GetBytes(text); 

     for (int i = 0; i < text.Length; i++) 
     { 
      int vout = Convert.ToInt32(asciiBytes[i]); 
      int c = (int)BigInteger.ModPow(vout, e, n); 
      char cipher = Convert.ToChar(c); 
      textBox2.Text = char.ToString(cipher); 
     } 
    } 

ですが、それは、テキストボックスに任意のヘルプを表示されませんか?

+0

。 'メソッドを直接' char'クラスから呼び出すのではなく –

答えて

2

各ループでボックスのテキストを上書きしています。

最後の文字列をテキストボックスに入れたい場合は、ループで文字列を作成してからループが完了したら、最後の文字列をテキストボックスに入れます。

1

ループの各繰り返しで、Textを1文字に設定しています。あなたが唯一のこれまでの過書き込みでテキストボックスの.Textプロパティを使用するために、テキストボックスに最後値を参照するつもりだ文字列を構築し、ループの外text

string text = "indra"; 

byte[] asciiBytes = Encoding.ASCII.GetBytes(text); 
char[] result = new char[text.Length]; 
for (int i = 0; i < text.Length; i++) 
{ 
    int vout = Convert.ToInt32(asciiBytes[i]); 
    int c = (int)BigInteger.ModPow(vout, e, n); 
    char cipher = Convert.ToChar(c); 
    result[i] = cipher; 
} 
textBox2.Text = new string(result); 
+0

私はあなたのコードを試しますが、結果はエラーです。 – Indra776

+0

あなたは私にエラーが何であるか教えない限り、私はそれを診断するのに役立ちません! – Jamiec

+0

申し訳ありませんが、私の間違い、あなたのコードが正常に動作する、 ありがとう。 – Indra776

0

それを割り当てますループの繰り返し。 UIがループ反復の間に更新されたとしても、それは知覚するには速すぎるでしょう。

あなたは各反復内のテキストボックスにを追加することもできます

textBox2.Text += char.ToString(cipher); 

それとも、ループ内の文字列を構築し、その後、テキストボックス(一般的に好ましい解決策)を設定:

var sb = new StringBuilder(); 
for (int i = 0; i < text.Length; i++) 
{ 
    //... 
    sb.Append(char.ToString(cipher)); 
} 
textBox2.Text = sb.ToString(); 
+0

ありがとう、それは動作しますが、私は最後の文字が欠けている理由はまだ混乱します。 – Indra776

+0

@ Indra776:わかりません。しかし、デバッガでステップ実行すれば、その問題を特定するのに役立ちます。 – David

0

おそらく、を結合してのすべての結果を単一

public void enkrip() { 
    string text = "indra"; 

    byte[] asciiBytes = Encoding.ASCII.GetBytes(text); 

    // "iùŢĕ" 
    textBox2.Text = String.Concat(asciiBytes 
     .Select(b => (char)BigInteger.ModPow(b, e, n))); 
    } 

asciiBytes.Lengthtext.Lengthは(一般的な場合に)異なる値であることに、注意してください。 16進コードとして暗号化されたテキストを表現するには、次の

public void enkrip() { 
    string text = "indra"; 

    byte[] asciiBytes = Encoding.ASCII.GetBytes(text); 

    // 0069, 00f9, 0162, 0115, 001c 
    textBox2.Text = String.Join(", ", asciiBytes 
     .Select(b => BigInteger.ModPow(b, e, n).ToString("x4"))); 
    } 

私の最後の提案は抽出方法にある:既に与えられた答えに加えて、あなたは `cipher.ToString()を使用することができます

public static String Encrypt(String text) { 
    if (String.IsNullOrEmpty(text)) 
     return text; 

    int n = 689; 
    int e = 41; 

    return String.Concat(Encoding.ASCII.GetBytes(text) 
     .Select(b => (char)BigInteger.ModPow(b, e, n))); 
    } 

    ... 

    // and so you can encrypt as easy as 
    textBox2.Text = Encrypt("indra"); 
+0

どこにコードを置くべきですか? – Indra776

+0

@ Indra776: 'enkrip()'メソッドでは、私の編集を参照してください。 –

+0

大丈夫、ありがとう、 なぜ結果の長さはテキストと同じではありませんか? あなたはそれを説明できますか? – Indra776

関連する問題