C# 将字符串转换为int时出现问题
我在将字符串转换为int时遇到了一些问题,一个字符一个字符地转换。当我逐步遍历代码时,字符串中的每个字符都将转换为其ASCII表示形式。例如,一个0被转换成48 我想做的是,取一个4位数的数字,取每个数字,然后做一些不同的事情 例如,如果date1是0415,num1应该是0、num2 4、num3 1和num4 5C# 将字符串转换为int时出现问题,c#,C#,我在将字符串转换为int时遇到了一些问题,一个字符一个字符地转换。当我逐步遍历代码时,字符串中的每个字符都将转换为其ASCII表示形式。例如,一个0被转换成48 我想做的是,取一个4位数的数字,取每个数字,然后做一些不同的事情 例如,如果date1是0415,num1应该是0、num2 4、num3 1和num4 5 非常感谢您的帮助,如果还需要其他帮助,请告诉我。尝试使用GetNumericValue而不是Convert.ToInt32 此处的文档: 此外,您可能可以将代码简化为以下内容,除非
非常感谢您的帮助,如果还需要其他帮助,请告诉我。尝试使用GetNumericValue而不是Convert.ToInt32 此处的文档: 此外,您可能可以将代码简化为以下内容,除非我遗漏了以下内容:
num1 = Char.GetNumericValue(date1[0]);
num2 = Char.GetNumericValue(date1[1]);
num3 = Char.GetNumericValue(date1[2]);
num4 = Char.GetNumericValue(date1[3]);
这对我来说似乎有点奇怪,但你的循环只处理前4个字符
如果您想处理4个以上的数据,我会回到使用循环的方式,将所有的数字放入一个数组或其他东西中,而不是为每个数组创建一个特定的变量。尝试使用GetNumericValue而不是Convert.ToInt32 此处的文档: 此外,您可能可以将代码简化为以下内容,除非我遗漏了以下内容:
num1 = Char.GetNumericValue(date1[0]);
num2 = Char.GetNumericValue(date1[1]);
num3 = Char.GetNumericValue(date1[2]);
num4 = Char.GetNumericValue(date1[3]);
这对我来说似乎有点奇怪,但你的循环只处理前4个字符
如果你想处理4个以上的数字,我会回到使用循环的方式,把所有的数字都推到一个数组中,而不是为每个数组创建一个特定的变量。你的case语句寻找的是ASCII值1,2,3,…,而不是字符值。更改您的案例陈述以匹配:
case '1':
case '2':
...
您的case语句正在查找ASCII值1、2、3、…,而不是字符值。更改您的案例陈述以匹配:
case '1':
case '2':
...
其行为完全符合文件规定:
一个32位有符号整数,表示value参数的UTF-16编码代码点
您可以使用获取字符的数值,或者如果您知道它在“0”-“9”范围内,您可以使用:
int digit = c - '0';
这有时比调用Char.GetNumericValue更简单,因为后者返回double,因此可以表示¼等值。如果您只想处理“0”-“9”,最好验证:
if (c < '0' || c > '9')
{
// Throw an exception or something like that
}
此外,请注意,如果date1真的是一个日期表示,请不要自己完成所有这些操作-使用或TryParseExact。的行为与文档中的完全相同:
一个32位有符号整数,表示value参数的UTF-16编码代码点
您可以使用获取字符的数值,或者如果您知道它在“0”-“9”范围内,您可以使用:
int digit = c - '0';
这有时比调用Char.GetNumericValue更简单,因为后者返回double,因此可以表示¼等值。如果您只想处理“0”-“9”,最好验证:
if (c < '0' || c > '9')
{
// Throw an exception or something like that
}
此外,请注意,如果date1真的是一个日期表示,那么不要自己做所有这些-使用或TryParseExact。为什么不使用for循环?这是一种奇怪的方法,但为什么要将结果分别乘以1、2、3和4?它可能应该是num1=cNum*1;您正在尝试将字符而不是转换为int的字符进行倍数运算。此外,如果递增num+,则可以删除switch语句,并执行类似numarray[num]=cNum*num+1char的操作。例如,c是“1”,而不是1。试一试,看看你能得到什么。有例外吗?结果是否与您预期的不同?不太清楚你在问什么。为什么不使用for循环?这是一种奇怪的方法,但为什么要将结果分别乘以1、2、3和4?它可能应该是num1=cNum*1;您正在尝试将字符而不是转换为int的字符进行倍数运算。此外,如果递增num+,则可以删除switch语句,并执行类似numarray[num]=cNum*num+1char的操作。例如,c是“1”,而不是1。试一试,看看你能得到什么。有例外吗?结果是否与您预期的不同?我不太清楚你在问什么。我也是这么想的,但实际上是Convert.ToInt32调用并不能满足OP的要求。啊,是的,你是对的。好吧,伟大的乔恩·斯基特又一次击败了我!我也是这么想的,但实际上是Convert.ToInt32调用并不能满足OP的要求。啊,是的,你是对的。好吧,伟大的乔恩·斯基特又一次击败了我!谢谢你,阿贝。它只有4个字符,所以我才这么做。我知道它非常难看,但我只是想得到一些快速和功能性的东西。谢谢Abe。它只有4个字符,所以我才这么做。我知道它非常难看,但我只是想得到一些快速和功能。非常感谢。我通常不使用C语言编写代码,所以我对如何实现这一点非常粗略,很明显,哈哈。再次感谢。非常感谢。我通常不使用C语言编写代码,p也是 很明显,莱蒂对如何做到这一点略知一二,哈哈。再次感谢。