将包含以“0x”开头的hex值的字符串转换为整数或长整数

如何将字符串值“0x310530”转换为C#中的整数值?

我已经尝试过int.TryParse (甚至int.TryParseSystem.Globalization.NumberStyles.Any ),但它不起作用。

更新:似乎Convert.ToInt64或Convert.ToInt32工作而不必删除尾随的“0x”:

long hwnd = Convert.ToInt64("0x310530", 16); 

Convert.ToInt64 Method (String, Int32)的文档说:

“如果fromBase为16,则可以将value参数指定的数字加上”0x“或”0X“前缀。”

但是,我更喜欢像TryParse这样不会引发exception的方法。

 int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530"); 

来自MSDN :

NumberStyles.AllowHexSpecifier

表示数字字符串表示hex值。 有效的hex值包括数字0-9和hex数字AF和af。 使用此样式解析的字符串不能以 “0x”或“&h” 作为前缀

所以你必须首先删除0x前缀:

 string s = "0x310530"; int result; if (s != null && s.StartsWith("0x") && int.TryParse(s.Substring(2), NumberStyles.AllowHexSpecifier, null, out result)) { // result == 3212592 } 

如果删除前导0x,则可以使用int.Parse

 int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier); 

正如Cristi Diaconescu指出的那样 , 直接来自SHanselman ,但我已经包含了主要的源代码:

 public static T GetTfromString(string mystring) { var foo = TypeDescriptor.GetConverter(typeof(T)); return (T)(foo.ConvertFromInvariantString(mystring)); } 

整篇文章值得仔细看看!