将转换后的值存储在变量中

时间:2014-08-22 08:33:11

标签: c#

我正在尝试存储提取的字符串的值。我无法使其工作

    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'这怎么可能?

3 个答案:

答案 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);