如何在不返回C#中的某些ascii字符的情况下将char转换为int?

时间:2014-08-17 01:57:18

标签: c# type-conversion

char c = '0';
int number = (int) c;
Debug.Log(number);

它会返回一个看不见的角色,而我实际上想要投射' 0'以整数表示为0。我已经尝试过了:

  • 转换类的方法
  • GetNumericValue方法
  • 这个:(int)c - ' 0'

6 个答案:

答案 0 :(得分:4)

0减去0-9

char c = '0';
int number = (int)c - '0';

这不适用于other numerals

答案 1 :(得分:2)

尝试int.Parse

char c = '0';
int number = int.Parse(c.ToString());

请注意,如果参数无效,这将导致异常。

你也可以尝试:int.TryParse

char c = '0';
int number;
if (int.TryParse(c.ToString(),out number))
{
   //parse successfully
}

答案 2 :(得分:2)

您可以编写一个简单的扩展方法来将char转换为int,另外您可以检查char是否可以实际转换为整数。

public static int ToInt32(this char c)
{
    if (!Char.IsNumber(c))
    {
        throw new ArgumentException("Char is not a number", "c");
    }
    return c - '0';
}

用法

[Test]
[TestCase('1', ExpectedResult = 1)]
[TestCase('a', ExpectedException = typeof(ArgumentException))]
public int ChatToNumTest(char c)
{
    return c.ToInt32();
}

答案 3 :(得分:1)

GetNumericValue应该有效,除非您忘记将其强制转换为int,因为它返回double:

char c = '0';
int number = (int)char.GetNumericValue(c);

//another way...
 int number = Convert.ToInt32(c.ToString());

答案 4 :(得分:1)

检查char是否在预期范围内是个好主意,

int number = -1;
char c = '0';
if (c >= '0' && c <= '9') {
  number = (int) c - '0';
} else {
  Debug.Log("Character " + c + " isn't a digit.");
}

答案 5 :(得分:0)

如果想要与标准数字10对应的字符值,请使用the following

var number = System.Globalization.CharUnicodeInfo.GetDecimalDigitValue(c);

如果您想要两个数字和更常见的Unicode数字字符的数值,请使用the following,例如分数如½:

var number = System.Globalization.CharUnicodeInfo.GetNumericValue(c);