如何将字符串的字符转换为整数数组
How to convert a string's chars into an array of ints
我正在尝试获取用户的输入并将其转换为整数数组。问题是当我选择 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]);
}
这是合理的,因为当用户输入字符2时,这对应于十进制的50。这与ASCII table相关联。
请看here.
为了避免这种情况,您应该尝试解析每个字符,如下所示:
userChoice[i] = Int32.Parse(userChoiceAsString[i].ToString());
或者您可以使用 Char 的方法 GetNumericValue
,其中 returns 一个浮点数,然后将其转换为一个整数。
userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);
尝试:
userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);
您需要使用 int.Parse() 将 ASCII 值转换为 int,否则您将打印 ASCII 值。
我们所熟知的数字0在ASCII、Unicode等几种字符集中都是由数值为48的字符表示的。字母 A 是 65,等等。这实际上与实际数值无关,因为字符也代表字母和数百万其他没有数值的字形。
你可以看看Char.GetNumericValue
方法,但注意它也是returns各种字符集的pi、e等数字的数值。
我们通常做的是检查字符是否在'0'
和'9'
之间,如果是,则取值为(int)ch - (int)'0'
。这 returns 你的数字与 '0'
字符有多远,因此你正在寻找的 0..9 值。恰好'0'..'9'
两个字符在后面(刚好有道理,但不一定如此)。
您也可以对单个字符或整个字符串尝试 int.Parse
。这也可以像您期望的那样处理常见的十进制数字。
我正在尝试获取用户的输入并将其转换为整数数组。问题是当我选择 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]);
}
这是合理的,因为当用户输入字符2时,这对应于十进制的50。这与ASCII table相关联。
请看here.
为了避免这种情况,您应该尝试解析每个字符,如下所示:
userChoice[i] = Int32.Parse(userChoiceAsString[i].ToString());
或者您可以使用 Char 的方法 GetNumericValue
,其中 returns 一个浮点数,然后将其转换为一个整数。
userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);
尝试:
userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);
您需要使用 int.Parse() 将 ASCII 值转换为 int,否则您将打印 ASCII 值。
我们所熟知的数字0在ASCII、Unicode等几种字符集中都是由数值为48的字符表示的。字母 A 是 65,等等。这实际上与实际数值无关,因为字符也代表字母和数百万其他没有数值的字形。
你可以看看Char.GetNumericValue
方法,但注意它也是returns各种字符集的pi、e等数字的数值。
我们通常做的是检查字符是否在'0'
和'9'
之间,如果是,则取值为(int)ch - (int)'0'
。这 returns 你的数字与 '0'
字符有多远,因此你正在寻找的 0..9 值。恰好'0'..'9'
两个字符在后面(刚好有道理,但不一定如此)。
您也可以对单个字符或整个字符串尝试 int.Parse
。这也可以像您期望的那样处理常见的十进制数字。