2016-03-30 12 views
1

Ich habe ein Problem fo Ergebnis meiner Looping-Code angezeigt werden, dies ist mein CodeWie kann ich für jede Schleife Textbox in C# anzeigen?

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); 
     } 
    } 

aber nicht in Textbox erscheinen, jede mögliche Hilfe?

+0

Neben der bereits gegebene Antwort, können Sie 'cipher.ToString verwenden(); 'Anstatt diese Methode direkt von der' char' Klasse –

Antwort

2

Sie überschreiben den Text in Ihrer Box mit jeder Schleife.

Wenn Sie die letzte Zeichenfolge in Ihrem Textfeld möchten, sollte Ihre Schleife eine Zeichenfolge erstellen, und wenn die Schleife fertig ist, legen Sie die letzte Zeichenfolge in Ihrem Textfeld.

1

Bei jeder Iteration der Schleife setzen Sie die auf ein einzelnes Zeichen. Erstellen Sie die Zeichenfolge auf, und weist es die text außerhalb der Schleife

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

aufzurufen, versuche ich Ihren Code, aber das Ergebnis ist ein Fehler. – Indra776

+0

Ich fürchte, ich kann helfen, zu diagnostizieren, es sei denn, Sie sagen mir, was der Fehler ist! – Jamiec

+0

Entschuldigung, dass mein Fehler, Ihr Code ordnungsgemäß funktioniert, danke. – Indra776

0

Sie sind immer nur den letzten Wert in dem Textfeld gehen, um zu sehen, da Sie überschreiben den .Text Eigenschaft des Textfelds in jede Iteration der Schleife. Selbst wenn die Benutzeroberfläche zwischen Schleifeniterationen aktualisiert wird, wäre sie zu schnell, um wahrgenommen zu werden.

Sie könnten anhänge das Textfeld in jeder Iteration:

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

Oder vielleicht einen String in der Schleife bauen und dann das Textfeld danach (in der Regel die bevorzugte Lösung):

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

danke, es funktioniert, aber ich verwechsle immer noch, warum das letzte Zeichen fehlt. – Indra776

+0

@ Indra776: Ich bin mir nicht wirklich sicher. Aber das Durchlaufen eines Debuggers sollte Ihnen helfen, dieses Problem zu identifizieren. – David

0

, möchten Sie ein kombinieren alle Ergebnisse in ein einzigenstring:

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))); 
    } 

Bitte beachten Sie, dass asciiBytes.Length und text.Length unterschiedliche Werte (im allgemeinen Fall) sind. Um verschlüsselten Text als Hex-Codes darstellen:

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"))); 
    } 

Mein letzter Vorschlag Extrakt ist ein Verfahren:

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

wo sollte ich diesen Code platzieren? – Indra776

+0

@ Indra776: in der 'enkrip() 'Methode, siehe meine Bearbeitung. –

+0

okay, danke, aber warum die Länge des Ergebnisses nicht gleich mit Text? können Sie es erklären? – Indra776

Verwandte Themen