Convert a string containing a hexadecimal value starting with "0x" to an integer or long
Solution 1
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
Solution 2
From MSDN:
NumberStyles.AllowHexSpecifier
Indicates that the numeric string represents a hexadecimal value. Valid hexadecimal values include the numeric digits 0-9 and the hexadecimal digits A-F and a-f. Strings that are parsed using this style cannot be prefixed with "0x" or "&h".
So you have to strip out the 0x
prefix first:
string s = "0x310530";
int result;
if (s != null && s.StartsWith("0x") && int.TryParse(s.Substring(2),
NumberStyles.AllowHexSpecifier,
null,
out result))
{
// result == 3212592
}
Solution 3
Direct from SHanselman, as pointed by Cristi Diaconescu, but I've included the main source code:
public static T GetTfromString<T>(string mystring)
{
var foo = TypeDescriptor.GetConverter(typeof(T));
return (T)(foo.ConvertFromInvariantString(mystring));
}
The whole article deserves a closer look!
Solution 4
If you remove the leading 0x, you could use int.Parse
int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier);
TechAurelian
Updated on April 29, 2021Comments
-
TechAurelian almost 3 years
How can I convert a string value like "0x310530" to an integer value in C#?
I've tried int.TryParse (and even int.TryParse with System.Globalization.NumberStyles.Any) but it does not work.
UPDATE: It seems that Convert.ToInt64 or Convert.ToInt32 work without having to remove the leading "0x":
long hwnd = Convert.ToInt64("0x310530", 16);
The documentation of
Convert.ToInt64 Method (String, Int32)
says:"If fromBase is 16, you can prefix the number specified by the value parameter with "0x" or "0X"."
However, I would prefer a method like TryParse that does not raise exceptions.