将整数转换为ASCII会导致嘟嘟声和难以辨认的文本?

时间:2013-05-01 21:14:18

标签: c# type-conversion character ascii

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

我有this text file。我按如下方式阅读,然后将数字拆分成一个列表:

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 table进行比较,我发现结果肯定是匹配 - 例如,数字2会产生笑脸类型的数字。其中一次转换会产生哔哔声。

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

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

但这实际上会产生一个合适的字符串!我没有看到我的错误在哪里,以及为什么第一次转换失败,而第二次转换(除非我遗漏了某些东西,代码是相同的)很好。

我很感激任何帮助。

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

Here is the full code.

2 个答案:

答案 0 :(得分:2)

第二个起作用的原因和第一个起作用的原因是n的值不同。

可见字母的范围为32到126(分别为\t\n\r为9,10和13),如果您没有填写您正在进行“解密”的范围不正确(从您的代码示例中,您根本没有进行过任何解密)。

您必须对文本文件中的整数列表执行某些操作才能使其成为可翻译文本。

答案 1 :(得分:1)

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

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

打印该字符通常会导致发出蜂鸣声并在短时间内多次这样做会导致应用程序在大多数系统上冻结。