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

本文关键字:转换 int32 字符 字符串 数字 数字字符 | 更新日期: 2023-09-27 18:23:46

如果我有一个数字字符串和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

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

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

等等。。。

这之所以有效,是因为str[0]char'0'也是,在C#中减去字符会得到int

p.S.严格来说,并不是说减去chars就得到了int。减法没有为char定义,但字符可以隐式转换为int,所以就是这样:两个隐式转换成int,显然可以相互减去,得到另一个int

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

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

另一种使用数学的方法(我不是很擅长)

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

建立在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的验证,以及有效的字符串等。