a char를 로 변환하는 올바른 방법은 무엇입니까 int? 이것은 제공합니다 49:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
문자열로 변환 한 다음 구문 분석하고 싶지 않습니다.
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
double이지만,
Char.GetNumericValue('⅓')실제로 반환 0.3333...합니다. 지적 해 주셔서 감사합니다!
어때 ( 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();
int.Parse, 즉 유효하지 않은 입력에서 예외가 발생하는 경우 경계 검사를 추가해야합니다.if (i < 0 || i > 9) throw new FormatException();
다음 확장 방법을 사용할 수 있습니다.
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';
}
}
char에 int우리는 입력 매개 변수가 아니라, 출력의 범위를 확인해야 int값.
int메서드의 시작 부분에 숫자 문자 범위가 수행 되었기 때문에 결과 값 을 확인할 필요가 없으므로 지정된 문자가 숫자 문자 범위에 포함되지 않으면 정확한 결과 값이 생성되며 예외가 발생합니다. 제공 한 것과 동일한 로직이지만 범위 검사는 메소드 시작시 수행됩니다.
if (c < 0 || c > 9)...
이를 수행하는 가장 안전한 방법은 Int32.TryParse 메서드를 사용하는 것입니다. 여기를 참조하십시오 : http://dotnetperls.com/int-tryparse
int val = '1' & 15;
ASCII 문자 0-9의 바이너리는 다음과 같습니다.
0-00110000
1-00110001
2-00110010
3-00110011
4-00110100
5-00110101
6-00110110
7-00110111
8-00111000
9-00111001
그리고 그들 각각을 처음 4 개의 LSB (비트 AND와 8'b00001111을 사용하여 15로 equels 사용)를 취하면 실제 숫자 (0000 = 0,0001 = 1,0010 = 2, ...)를 얻습니다.
16 진수 표현을 다루는 다른 답변의 확장 :
public int CharToInt(char c)
{
if (c >= '0' && c <= '9')
{
return c - '0';
}
else if (c >= 'a' && c <= 'f')
{
return 10 + c - 'a';
}
else if (c >= 'A' && c <= 'F')
{
return 10 + c - 'A';
}
return -1;
}