1

我从来没有在控制台应用程序中遇到过这样的问题——我听到一些相当可怕的哔哔声,程序(和我的电脑)瞬间冻结,然后控制台停止工作——它甚至不打印错误消息。

我有这个文本文件。我将其阅读如下,然后将数字拆分为一个列表:

string path = @"C:\Users\owner\Documents\Quick Access\cipher1.txt";
string data = "";
using (StreamReader sr = new StreamReader(path))
{
    data = sr.ReadToEnd();
}

List<int> encryptedNums = new List<int>();
foreach (string s in data.Split(','))
{
    encryptedNums.Add(Convert.ToInt32(s));
}

每个数字代表一个 ASCII 字符。我想将这些数字连接成一个字符串:

string encryptedString = "";

//WTF???? 
foreach (int n in encryptedNums)
{
    encryptedString += (char)n;
}

foreach循环导致一些非常奇怪的转换。通过将字符一个一个打印出来并与ASCII 表进行比较,我看到结果肯定匹配 - 例如,数字 2 导致一个笑脸类型的数字。其中一种转换会产生哔哔声。

这才是真正困扰我的地方。我有一个单独的方法,我基本上做同样的事情 - 我有一个整数列表,我尝试将它们转换为字符串:

string s = "";
foreach (int n in decrypted)
{
    s += (char)n;
}

但这实际上会产生正确的字符串!我看不到我的错误在哪里,为什么第一次转换失败,而第二次转换(除非我遗漏了什么,代码是一样的)很好。

我会很感激任何帮助。

最终导致崩溃的代码是正在打印encryptedString

这是完整的代码。

4

2 回答 2

2

第二个有效而第一个无效的原因是价值n不同。

可见字母将在 32 到 126 的范围内(以及 9、10 和 13 分别表示\t\n\r),如果您没有在该范围内获得整数,则表示您正在错误地进行“解密”(从您的代码示例中,您有根本没有进行任何解密)。

您必须对文本文件中的整数列表执行一些操作以使其成为易读的文本。

于 2013-05-01T21:27:11.497 回答
1

您的问题是铃铛字符或'\7'.

http://en.wikipedia.org/wiki/Bell_character

打印该字符通常会导致哔声,并且在短时间内多次执行此操作会导致应用程序在大多数系统上冻结。

于 2013-05-01T21:23:36.250 回答