如何在c#中显示每个循环到文本框?
我有一个问题,以显示我的循环代码的fo结果,这是我的代码如何在c#中显示每个循环到文本框?,c#,rsa,C#,Rsa,我有一个问题,以显示我的循环代码的fo结果,这是我的代码 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;
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);
}
}
private int n=689;
私人INTE=41;
私有整数d=137;
公共无效enkrip()
{
string text=“indra”;
字节[]asciiBytes=Encoding.ASCII.GetBytes(文本);
for(int i=0;i
但是它不会出现在文本框中,有什么帮助吗?每次循环都会覆盖文本框中的文本
如果要在文本框中输入最后一个字符串,循环应该生成一个字符串,然后循环完成后,将最后一个字符串放入文本框。在循环的每次迭代中,您都要将
文本设置为单个字符。构建字符串,并将其分配给循环外部的文本
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);
string text=“indra”;
字节[]asciiBytes=Encoding.ASCII.GetBytes(文本);
char[]结果=新字符[text.Length];
for(int i=0;i
您只能看到文本框中的最后一个值,因为您在循环的每次迭代中都重写了文本框的.text
属性。即使UI在循环迭代之间进行更新,也会太快而无法感知
您可以在每次迭代中将以下内容附加到文本框:
textBox2.Text += char.ToString(cipher);
或者在循环中构建一个字符串,然后设置文本框(通常是首选解决方案):
var sb=new StringBuilder();
for(int i=0;i
您可能希望将所有结果合并到一个字符串中
:
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)));
}
请注意,ascibytes.Length
和text.Length
是不同的值(一般情况下)。要将加密文本表示为十六进制代码,请执行以下操作:
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()
而不是直接从char
类调用该方法好的,谢谢,但是为什么结果的长度与文本不同呢?你能解释一下吗?@Indra776:最后一个字符有一个代码1c
(或28
),因此它是命令字符FS
(文件分隔符),因此没有显示。在我的编辑中,我还向您显示了字符的代码。如果你不想让命令字符在加密时加32(解密时减32),我现在明白了,这让我搞不清楚最后一个字符为什么消失了,谢谢你的帮助,恐怕我无法帮助诊断,除非你告诉我错误是什么!对不起,这是我的错误,您的代码工作正常,谢谢。谢谢,它工作正常,但我仍然不明白,为什么最后一个字符丢失了。@Indra776:我不太确定。但是在调试器中单步执行应该可以帮助您识别该问题。
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")));
}
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");