C#char a int
char to int c# (13)
¿Alguien ha considerado usar int.Parse()
e int.TryParse()
como este
int bar = int.Parse(foo.ToString());
Aún mejor así
int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
//Do something to correct the problem
}
Es mucho más seguro y menos propenso a errores
Entonces tengo un char en c #:
char foo = ''2'';
Ahora quiero poner el 2 en un int. Encuentro que Convert.ToInt32 devuelve el valor decimal real del carácter y no el número 2. Lo siguiente funcionará:
int bar = Convert.ToInt32(new string(foo, 1));
int.parse solo funciona en cadenas también.
¿No hay una función nativa en C # para pasar de una char a int sin convertirla en una cadena? Sé que esto es trivial, pero parece extraño que no haya nada nativo para hacer la conversión directamente.
Comparación de algunos de los métodos basados ββen el resultado cuando el personaje no es un dígito 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
Esto convierte a un número entero y maneja unicode
CharUnicodeInfo.GetDecimalDigitValue(''2'')
Puedes leer más here .
Esto funcionó para mí:
int bar = int.Parse("" + foo);
Esto lo convertirá en un int:
char foo = ''2'';
int bar = foo - ''0'';
Esto funciona porque cada personaje está representado internamente por un número. Los caracteres ''0'' a ''9'' están representados por números consecutivos, por lo que encontrar la diferencia entre los caracteres ''0'' y ''2'' da como resultado el número 2.
Estoy usando Compact Framework 3.5, y no tengo un método "char.Parse". Creo que no está mal usar la clase Convert. (Ver CLR a través de C #, Jeffrey Richter)
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);
Funciona con ASCII char o Unicode char
He visto muchas respuestas, pero me parecen confusas. ¿No podemos simplemente usar Type Casting?
Por ejemplo: -
int s;
char i= ''2'';
s = (int) i;
La forma real es:
int theNameOfYourInt = (int) .Char.GetNumericValue (theNameOfYourChar);
"theNameOfYourInt": el int al que quieres que se transforme tu char.
"theNameOfYourChar" - El Char que desea que se use para que se transforme en un int.
Deja todo lo demás.
Por defecto, usa UNICODE, por lo que sugiero utilizar el método defectuoso
int bar = int.Parse(foo.ToString());
Aunque los valores numéricos de abajo son los mismos para los dígitos y los caracteres latinos básicos.
Prueba esto
char x = ''9''; // ''9'' = ASCII 57
int b = x - ''0''; //That is ''9'' - ''0'' = 57 - 48 = 9
Respuestas interesantes pero los documentos dicen de manera diferente:
Use los métodos
GetNumericValue
para convertir un objetoChar
que represente un número en un tipo de valor numérico. UseParse
yTryParse
para convertir un carácter en una cadena en un objetoChar
. UseToString
para convertir un objetoChar
a un objetoString
.
char c = ''1'';
int i = (int)(c-''0'');
y puedes crear un método estático a partir de él:
static int ToInt(this char c)
{
return (int)(c - ''0'');
}
char foo = ''2'';
int bar = foo & 15;
El binario de los charecters ASCII 0-9 es:
0 - 00110000
1 - 00110001
2 - 00110010
3 - 00110011
4 - 00110100
5 - 00110101
6 - 00110110
7 - 00110111
8 - 00111000
9 - 00111001
y si toma en cada uno de ellos los primeros 4 LSB (usando Y a nivel de bit con 8''b00001111 que equels a 15) obtiene el número real (0000 = 0,0001 = 1,0010 = 2, ...)