문제
C#에 숯이 있습니다.
char foo = '2';
이제 나는 2를 int로 가져오고 싶다. Toint32는 숫자 2가 아닌 숯의 실제 소수점 값을 반환합니다. 다음은 작동합니다.
int bar = Convert.ToInt32(new string(foo, 1));
int.parse는 문자열에서만 작동합니다.
C#에는 문자열을 만들지 않고 숯에서 int로 이동하는 기본 기능이 없습니까? 나는 이것이 사소하다는 것을 알고 있지만 직접 변환을 직접 할 수있는 것은 아무것도 없다는 것이 이상하게 보입니다.
해결책
흥미로운 답변이지만 문서는 다르게 말합니다.
사용
GetNumericValue
변환하는 방법Char
숫자를 숫자 값 유형으로 나타내는 객체. 사용Parse
그리고TryParse
문자열의 문자를 a로 변환합니다Char
물체. 사용ToString
변환하려면Char
A에 반대String
물체.
다른 팁
이것은 int로 변환합니다.
char foo = '2';
int bar = foo - '0';
이것은 각 캐릭터가 내부적으로 숫자로 표현되기 때문에 작동합니다. 문자 '0'~ '9'는 연속 숫자로 표시되므로 문자 '0'과 '2'의 차이를 찾으면 숫자 2가 발생합니다.
누구든지 사용을 고려한 사람이 있습니다 int.Parse()
그리고 int.TryParse()
이와 같이
int bar = int.Parse(foo.ToString());
이렇게 더 좋습니다
int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
//Do something to correct the problem
}
훨씬 더 안전하고 오류가 적습니다
char c = '1';
int i = (int)(c-'0');
정적 메소드를 만들 수 있습니다.
static int ToInt(this char c)
{
return (int)(c - '0');
}
이 시도
char x = '9'; // '9' = ASCII 57
int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9
기본적으로 유니 코드를 사용하므로 결함의 방법을 사용하는 것이 좋습니다.
int bar = int.Parse(foo.ToString());
비록 아래의 숫자 값은 숫자와 기본 라틴 문자에 대해 동일하지만.
진짜 방법은 다음과 같습니다.
int whenameofyourint = (int) .char.getnumericvalue (whenameofyourchar);
"thenameofyourint" - 당신이 당신의 숯을 변형시키기를 원하는 int.
"thenameofyourchar" - 사용하려는 숯으로 int로 변환됩니다.
다른 모든 것을 남겨 두십시오.
원칙:
char foo = '2';
int bar = foo & 15;
ASCII Charecters 0-9의 이진은 다음과 같습니다.
0 - 0011 0000
1 - 0011 0001
2 - 0011 0010
3 - 0011 0011
4 - 0011 0100
5 - 0011 0101
6 - 0011 0110
7 - 0011 0111
8 - 0011 1000
9 - 0011 1001
그리고 각각 1을 가져 가면 처음 4 LSB (비트를 사용하고 8'B00001111을 사용하여 15와 동일) 실제 숫자 (0000 = 0,0001 = 1,0010 = 2, ...)를 얻습니다.
용법:
public static int CharToInt(char c)
{
return 0b0000_1111 & (byte) c;
}
문자가 ASCII 자리가 아닌 결과에 기초한 일부 방법의 비교 :
char c = '\n';
Debug.Print($"{c & 15}"); // 10
Debug.Print($"{c ^ 48}"); // 58
Debug.Print($"{c - 48}"); // -38
Debug.Print($"{(uint)c - 48}"); // 4294967258
Debug.Print($"{char.GetNumericValue(c)}"); // -1
Compact Framework 3.5를 사용하고 있으며 "char.parse"메소드가 없습니다. Convert 클래스를 사용하는 것이 나쁘지 않다고 생각합니다. (C#, Jeffrey Richter를 통해 CLR 참조)
char letterA = Convert.ToChar(65);
Console.WriteLine(letterA);
letterA = 'あ';
ushort valueA = Convert.ToUInt16(letterA);
Console.WriteLine(valueA);
char japaneseA = Convert.ToChar(valueA);
Console.WriteLine(japaneseA);
ASCII Char 또는 Unicode Char와 함께 작동합니다
@chad grant에 동의합니다
또한 문자열로 변환하면 질문에서 언급 한 것처럼 해당 값을 숫자로 사용할 수 있습니다.
int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2
더 간단하고 이해할 수있는 예를 만들려고 노력했습니다.
char v = '1';
int vv = (int)char.GetNumericValue(v);
char.getnumericvalue (v)는 이중으로 반환하고 (int)로 변환합니다.
배열로서 더 고급 사용량을 사용했습니다
int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();
나는 많은 대답을 보았지만 그들은 나에게 혼란스러워 보인다. 우리는 단순히 유형 캐스팅을 사용할 수는 없습니다.
예 :-
int s;
char i= '2';
s = (int) i;
이것은 나를 위해 효과가있었습니다.
int bar = int.Parse("" + foo);