如何将字符串值“0x310530”转换为C#中的整数值?
我已经尝试了 int.TryParse (甚至 int.TryParse System.Globalization.NumberStyles.Any )但它没有工作
更新 似乎Convert.ToInt64或Convert.ToInt32无需删除尾随的“0x”即可工作:
long hwnd = Convert.ToInt64("0x310530", 16);
Convert.ToInt64 Method (String, Int32)
的文档说:
“如果fromBase为16,则可以为该值指定的数字加前缀 带“0x”或“0X”的参数。“
但是,我更喜欢像TryParse这样不会引发异常的方法。
答案 0 :(得分:24)
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
答案 1 :(得分:13)
来自MSDN:
NumberStyles.AllowHexSpecifier
表示数字字符串表示十六进制值。有效的十六进制值包括数字0-9和十六进制数字A-F和a-f。使用此样式解析的字符串不能以<0x“或”&amp; 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
}
答案 2 :(得分:2)
如果删除前导0x,则可以使用int.Parse
int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier);
答案 3 :(得分:2)
Direct from SHanselman,正如Cristi Diaconescu指出的那样,但我已经包含了主要的源代码:
public static T GetTfromString<T>(string mystring)
{
var foo = TypeDescriptor.GetConverter(typeof(T));
return (T)(foo.ConvertFromInvariantString(mystring));
}
整篇文章值得仔细研究!
答案 4 :(得分:0)
在 Caverna 的回答的基础上进一步构建,我添加了一个 tryparse 方法,以便我们可以测试转换是否对某种类型有效。
public static T GetTfromString<T>(string mystring)
{
var foo = TypeDescriptor.GetConverter(typeof(T));
return (T)(foo.ConvertFromInvariantString(mystring));
}
public static bool TryGetTFromString<T>(string mystring, out T value)
{
try
{
value = GetTfromString<T>(mystring);
return true;
}
catch (FormatException)
{
value = default(T);
return false;
}
}