将字符串转换为int的问题

时间:2013-04-15 18:46:19

标签: c#

我遇到了一个问题,将string转换为int,char为char。当我单步执行代码时,char中的每个string都将转换为其ASCII表示形式。例如,0正在转换为48

我要做的是采取一个4位数字,取每个数字并做一些不同的事情。

例如,如果date10415,则num1应为0,num2 4,num3 1和num4 5。

foreach (char c in date1)
{                
    switch (num)
    {
        case 1:
            // calculate first number
            cNum = Convert.ToInt32(c);
            num1 = c * 1;
            break;

        case 2:
            // calculate second number
            cNum = Convert.ToInt32(c);
            num2 = c * 2;
            break;

        case 3:
            // calculate third number
            cNum = Convert.ToInt32(c);
            num3 = c * 3;
            break;

        case 4:
            // calculate fourth number
            cNum = Convert.ToInt32(c);
            num4 = c * 4;
            break;

        default:
            break;
    }

    num++;
}

非常感谢任何帮助,如果需要其他任何帮助,请告诉我。

3 个答案:

答案 0 :(得分:3)

尝试使用GetNumericValue而不是Convert.ToInt32()。

此处的文档:http://msdn.microsoft.com/en-us/library/system.char.getnumericvalue.aspx

另外 - 除非我遗漏了某些东西,否则你可能会简化你的代码:

num1 = Char.GetNumericValue(date1[0]);
num2 = Char.GetNumericValue(date1[1]);
num3 = Char.GetNumericValue(date1[2]);
num4 = Char.GetNumericValue(date1[3]);

这对我来说似乎很奇怪,但你的循环只处理前4个字符。

如果你想要处理超过4个,我会回到使用循环,只需将所有数字推入数组或其他内容,而不是为每个数字创建一个特定的变量。

答案 1 :(得分:2)

Convert.ToInt32的行为完全符合记录:

  

32位有符号整数,表示值参数的UTF-16编码代码点。

您可以使用Char.GetNumericValue获取角色的数值,或者如果您知道它在“0” - “9”范围内,您可以使用:

int digit = c - '0';

这有时比调用Char.GetNumericValue更简单,因为后者返回double,因此它可以表示诸如¼之类的值。如果你只想处理'0' - '9',最好验证:

if (c < '0' || c > '9')
{
    // Throw an exception or something like that
}

此外,请注意,如果date1确实是一个日期表示,请不要自己完成所有这些操作 - 使用DateTime.ParseExact(或TryParseExact)。

答案 2 :(得分:0)

您的案例陈述正在寻找ASCII值1, 2, 3,...,而不是字符值。更改您的案例陈述以匹配:

case '1':
case '2':
...