c# - recursivo - hex to int
Convierta una cadena que contenga un valor hexadecimal que comience con “0x” en un entero o largo (4)
¿Cómo puedo convertir un valor de cadena como "0x310530" a un valor entero en C #?
He intentado int.TryParse (e incluso int.TryParse con System.Globalization.NumberStyles.Any ) pero no funciona.
ACTUALIZACIÓN: Parece que Convert.ToInt64 o Convert.ToInt32 funcionan sin tener que eliminar el "0x" al final:
long hwnd = Convert.ToInt64("0x310530", 16);
La documentación del Convert.ToInt64 Method (String, Int32)
dice:
"Si fromBase es 16, puede prefijar el número especificado por el parámetro de valor con" 0x "o" 0X ".
Sin embargo, preferiría un método como TryParse que no genere excepciones.
Desde MSDN :
NumberStyles.AllowHexSpecifier
Indica que la cadena numérica representa un valor hexadecimal. Los valores hexadecimales válidos incluyen los dígitos numéricos 0-9 y los dígitos hexadecimales AF y af. Las cadenas que se analizan con este estilo no pueden tener el prefijo "0x" o "& h".
Así que tienes que quitar el prefijo 0x
primero:
string s = "0x310530";
int result;
if (s != null && s.StartsWith("0x") && int.TryParse(s.Substring(2),
NumberStyles.AllowHexSpecifier,
null,
out result))
{
// result == 3212592
}
Si elimina el 0x inicial, puede usar int.Parse
int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier);
Directo de SHanselman , como señaló Cristi Diaconescu , pero he incluido el código fuente principal:
public static T GetTfromString<T>(string mystring)
{
var foo = TypeDescriptor.GetConverter(typeof(T));
return (T)(foo.ConvertFromInvariantString(mystring));
}
¡Todo el artículo merece una mirada más cercana!
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");