将数字字符串字符转换为int32

时间:2014-09-21 22:44:45

标签: c#

如果我有一串数字和int个变量a, b, c,我想将第一个数字分配给int a,第二个数字分配给int b,依此类推我这样做?这个片段说明了我的问题:

var str = "123";
int a = Convert.ToInt32(str[0]);
Console.WriteLine(str[0] + " " + a );

输出:

1 49

我该怎么做(除了从每次尝试的转换中减去48)?

修改

今天我了解到str[0]生成了Char,而不是string

3 个答案:

答案 0 :(得分:3)

int a = str[0] - '0';
int b = str[1] - '0';
int c = str[2] - '0';

等...

这是有效的,因为str[0]char'0'也是如此,减去字符会在C#中为您提供int

<子> P.S。嗯,严格来说,减去char s并不能给你一个int。没有为char定义减法,但是字符可以隐式转换为int,因此会发生什么:两次隐式转换为int,显然可以从每个中减去另一个是给另一个int

答案 1 :(得分:0)

您正在使用Convert.ToInt32(char)重载。试试ToString

int a = Convert.ToInt32(str[0].ToString());

使用Math的另一种方式(我不擅长)

string x = "123";
int number = int.Parse(x);
int first = number / 100;
int second = (number % 100) / 10;
int third = number % 10;

答案 2 :(得分:0)

以Selman22的答案为基础:

var str = "123";
int digit = GetDigit(str, 1);
Response.Write(digit.ToString()); // Prints '1'

int GetDigit(String s, Int32 digitPos)
{
  var actualDigitPos = (s.Length - digitPos) + 1;
  var number = Int32.Parse(s);

  return (number % (Int32)Math.Pow(10, actualDigitPos)) / (Int32)Math.Pow(10, actualDigitPos - 1);
}

请记住,您应该在字符串长度和digitPos上添加某种验证,以及有效的字符串等。