문제

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 변환하려면 CharA에 반대 String 물체.

http://msdn.microsoft.com/en-us/library/system.char.aspx

다른 팁

이것은 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());

비록 아래의 숫자 값은 숫자와 기본 라틴 문자에 대해 동일하지만.

이것은 정수로 변환되어 유니 코드를 처리합니다

CharUnicodeInfo.GetDecimalDigitValue('2')

더 읽을 수 있습니다 여기.

진짜 방법은 다음과 같습니다.

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top