我遇到了一个问题,将string
转换为int
,char为char。当我单步执行代码时,char
中的每个string
都将转换为其ASCII表示形式。例如,0
正在转换为48
。
我要做的是采取一个4位数字,取每个数字并做一些不同的事情。
例如,如果date1
为0415
,则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++;
}
非常感谢任何帮助,如果需要其他任何帮助,请告诉我。
答案 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':
...