我正在尝试存储提取的字符串的值。我无法使其工作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string a = "123";
int c = a[a.Length - 1];
Console.WriteLine(c);
}
}
}
不应该将3存储在变量c中吗?我只想存储3个;我不知道这有什么问题,输出是'51'这怎么可能?
答案 0 :(得分:7)
不应该存储在变量c?
中
不,'3'
的整数表示应该存储在变量c
中,确实是。
你有效地做了:
char tmp = a[a.Length - 1]; // tmp = '3'
int c = tmp; // Implicit conversion to int
"字符" .NET中的表示实际上是一个UTF-16代码单元......从char
转换为int
只是复制该代码单元。
'3'
的代码单位是51,因此输出。
如果您只是使用char
,那么您就可以了:
string a = "123";
char c = a[a.Length - 1];
Console.WriteLine(c); // "3"
如果你想获得"数值"一个角色,你可以使用char.GetNumericValue
:
int value = (int) char.GetNumericValue(a[a.Length - 1]);
请注意,您必须转换为int
因为返回类型为double
,以便处理表示分数,无穷大等的字符。
如果您绝对确定该值始终为ASCII数字,则可以减去'0'
:
int value = a[a.Length - 1] - '0';
请注意,这会默默地给出"奇怪的"但是,非数字输入的结果。
答案 1 :(得分:3)
您隐式将字符3的ascii代码转换为整数 此代码值为51
如果要获取整数值,则需要解析该字符
string a = "123";
char c = a[a.Length - 1];
string c2 = string.Concat(c,c);
int v = Int32.Parse(c.ToString());
int v2 = v + v;
Console.WriteLine("This is a char:" + c); // 3
Console.WriteLine("This is a string:" + c2); // 33
Console.WriteLine("This is an integer: " + v); // 3
Console.WriteLine("This is an integer: " + v2); // 6
答案 2 :(得分:1)
您可以在char和整数之间使用隐式转换
或
使用Parse
使用从string到int的显式转换string a ="123";
string b = a.Substring(a.Length-1,1);
int c = int.Parse(b);