C#代码仅输出字符串首字符ASCII十进制值的问题求助
解决C#只输出首字符ASCII值的问题
我明白你的问题了——你想要把输入的明文每个字符转成三位格式的ASCII十进制值,用空格分隔显示在文本框里,但现在代码只输出第一个字符的ASCII。这大概率是因为你只处理了字符串的第一个字符,没遍历所有字符,而且没做补零处理。
错误原因分析
比如你可能写了类似这样的代码:
string plaintext = "e 9aA"; int firstCharAscii = (int)plaintext[0]; txtResult.Text = firstCharAscii.ToString();
这种写法只会取plaintext的第一个字符(也就是'e',ASCII为101),自然只输出101,完全没处理后面的字符。
正确实现代码
下面是两种可以实现你需求的写法,都能遍历所有字符并生成三位格式的ASCII字符串:
写法1:foreach循环(更直观,适合新手)
// 假设plaintext是你的输入明文,txtResult是用来显示结果的文本框控件 string plaintext = "e 9aA"; // 替换成你的输入变量 List<string> formattedAsciiList = new List<string>(); foreach (char character in plaintext) { // 将字符转为ASCII值,并格式化为三位数字(不足三位补前导零) string formattedAscii = ((int)character).ToString("D3"); formattedAsciiList.Add(formattedAscii); } // 用空格拼接所有格式化后的字符串,赋值给文本框 txtResult.Text = string.Join(" ", formattedAsciiList);
写法2:LINQ简洁版(代码更紧凑)
如果你熟悉LINQ,可以用一行代码搞定:
txtResult.Text = string.Join(" ", plaintext.Select(c => ((int)c).ToString("D3")));
关键细节说明
- 遍历所有字符:不管是
foreach还是LINQ的Select,都会逐个处理字符串里的每一个字符,不会漏掉任何一个。 - 三位格式补零:
ToString("D3")是实现"032"这种格式的关键,它会把数字强制格式化为三位,前面补零,比如空格的ASCII是32,就会变成"032",而不是"32"。 - 空格拼接:
string.Join(" ", ...)会把所有三位的ASCII字符串用空格连接起来,生成你需要的"101 032 057 097 065"格式。
用上面的代码替换你原来的实现,就能得到预期的输出啦!
内容的提问来源于stack exchange,提问作者Troy E
相关产品推荐
相关产品推荐

