如何将字符串字符转换为int数组

时间:2015-01-01 13:55:56

标签: c# arrays string int

我试图获取用户的输入并将其转换为int数组。问题是当我选择4个数字时,例如2463字符串的输出是正确的,但int数组的输出不正确,似乎是选择的数字+48。

我不确定为什么会这样。感谢您给予的任何帮助。

string userChoiceAsString;
int[] userChoice = new int[4];

userChoiceAsString = (Console.ReadLine());

for (int i = 0; i < userChoiceAsString.Length; i++)
{
    userChoice[i] = userChoiceAsString[i];
    Console.WriteLine(userChoice[i]);
    Console.WriteLine(userChoiceAsString[i]);
}

4 个答案:

答案 0 :(得分:2)

这是合理的,因为当用户输入字符2时,这对应于十进制50.这与ASCII表相关联。

请查看here

为了避免这种情况,你应该尝试解析每个字符,如下所示:

userChoice[i] = Int32.Parse(userChoiceAsString[i].ToString());

或者您可以使用Char的方法GetNumericValue,它返回一个浮点数,然后将其转换为int。

userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);

答案 1 :(得分:2)

您需要使用int.Parse()将ASCII值转换为int,否则您将打印ASCII值。

答案 2 :(得分:0)

尝试:

userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);

答案 3 :(得分:0)

我们都知道的数字0由ASCII,Unicode和其他几个字符集中数字值为48的字符表示。字母A是65,等等。这实际上与实际数值无关,因为字符也代表字母和数百万没有数值的其他字形。

您可以查看Char.GetNumericValue方法,但请注意,它还会返回pi,e的数值以及各种字符集中的其他数字。

我们通常会检查字符是否在'0''9'之间,如果是,请将值设为(int)ch - (int)'0'。这将返回您的号码与'0'字符的距离,从而得到您要查找的0..9值。只是碰巧人物'0'..'9'在彼此之后(它才有意义,但它不一定如此)。

您还可以对单个字符或整个字符串尝试int.Parse。这也像你期望的那样处理通常的十进制数字。