1

string我在将 a 转换为int, char by char时遇到了一些问题。当我单步执行代码时,其中char的每一个string都被转换为它的 ASCII 表示。例如, a0正在转换为48.

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

例如,如果date10415num1则应为 0、4、1和num25 。num3num4

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++;
}

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

4

3 回答 3

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 个,我会回到使用循环并将所有数字推入一个数组或其他东西,而不是为每个数字创建一个特定的变量。

于 2013-04-15T18:49:05.907 回答
2

Convert.ToInt32行为与记录完全一致:

一个 32 位有符号整数,表示 value 参数的 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)。

于 2013-04-15T18:50:39.073 回答
0

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

case '1':
case '2':
...
于 2013-04-15T18:50:16.047 回答