Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为int时出现问题_C# - Fatal编程技术网

C# 将字符串转换为int时出现问题

C# 将字符串转换为int时出现问题,c#,C#,我在将字符串转换为int时遇到了一些问题,一个字符一个字符地转换。当我逐步遍历代码时,字符串中的每个字符都将转换为其ASCII表示形式。例如,一个0被转换成48 我想做的是,取一个4位数的数字,取每个数字,然后做一些不同的事情 例如,如果date1是0415,num1应该是0、num2 4、num3 1和num4 5 非常感谢您的帮助,如果还需要其他帮助,请告诉我。尝试使用GetNumericValue而不是Convert.ToInt32 此处的文档: 此外,您可能可以将代码简化为以下内容,除非

我在将字符串转换为int时遇到了一些问题,一个字符一个字符地转换。当我逐步遍历代码时,字符串中的每个字符都将转换为其ASCII表示形式。例如,一个0被转换成48

我想做的是,取一个4位数的数字,取每个数字,然后做一些不同的事情

例如,如果date1是0415,num1应该是0、num2 4、num3 1和num4 5


非常感谢您的帮助,如果还需要其他帮助,请告诉我。

尝试使用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也是 很明显,莱蒂对如何做到这一点略知一二,哈哈。再次感谢。