[C#] char를 int로 변환하는 방법?

a char를 로 변환하는 올바른 방법은 무엇입니까 int? 이것은 제공합니다 49:

int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works

문자열로 변환 한 다음 구문 분석하고 싶지 않습니다.



답변

아무도 바로 내장 된 정적 메서드를 언급하지 않은 것에 놀랐습니다 System.Char.

int val = (int)Char.GetNumericValue('8');
// val == 8


답변

어때 ( char c)

int i = (int)(c - '0');

char 값의 뺄셈은 무엇입니까?

API 질문 (코멘트), 확장 방법일까요?

public static class CharExtensions {
    public static int ParseInt32(this char value) {
        int i = (int)(value - '0');
        if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
        return i;
    }
}

그런 다음 사용 int x = c.ParseInt32();


답변

모두가 잊고있는 것은 왜 이런 일이 발생하는지 설명하는 것입니다.

Char는 기본적으로 정수이지만 ASCII 테이블에 포인터가 있습니다. 모든 문자에는 구문 분석을 시도 할 때 명확하게 볼 수있는 해당 정수 값이 있습니다.

Pranay는 분명히 다른 문자 집합을 가지고 있으므로 HIS 코드가 작동하지 않습니다. 유일한 방법은

int val = '1' - '0';

이것은 테이블에서 정수 값을 조회하기 때문에 '0'‘기본 값’에서 char 형식의 숫자를 빼면 원래 숫자가 제공됩니다.


답변

int i = (int)char.GetNumericValue(c);

또 다른 옵션 :

int i = c & 0x0f;

이것도 가능합니다.


답변

int val = '1' - '0';

이것은 ‘0’이 가장 낮은 ASCII 코드를 사용하여 수행 할 수 있으며 거기에서 문자 수를 계산합니다.


답변

int val = '1' - 48;


답변

다음 확장 방법을 사용할 수 있습니다.

public static class CharExtensions
    {
        public static int CharToInt(this char c)
        {
            if (c < '0' || c > '9')
                throw new ArgumentException("The character should be a number", "c");

            return c - '0';
        }
    }