尝试
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
要注意的事情(虽然它可能不适用于这个特定的整数转换)...如果输入不好,Convert.ToUInt32可能比UInt32.TryParse慢几个数量级,比如Convert.ToDouble vs Double.TryParse:http ://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586539#586539此外,它并不总是很清楚它的转换:http:// stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460 (5认同)
Jeremy Wiebe.. 45
您可以使用重载TryParse()
,它将NumberStyle参数添加到TryParse
调用中,该调用提供十六进制值的解析.使用NumberStyles.HexNumber
它允许您将字符串作为十六进制数传递.
注:该问题NumberStyles.HexNumber
是,它不支持带有前缀解析值(即0x
,&H
或者#
,所以你必须试图解析值之前剥离其关闭).
基本上你这样做:
uint color; var hex = TextBox1.Text; if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) || hex.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase)) { hex = hex.Substring(2); } bool parsedSuccessfully = uint.TryParse(hex, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out color);
有关如何使用NumberStyles枚举的示例,请参阅此文章:http://msdn.microsoft.com/en-us/library/zf50za27.aspx
尝试
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
您可以使用重载TryParse()
,它将NumberStyle参数添加到TryParse
调用中,该调用提供十六进制值的解析.使用NumberStyles.HexNumber
它允许您将字符串作为十六进制数传递.
注:该问题NumberStyles.HexNumber
是,它不支持带有前缀解析值(即0x
,&H
或者#
,所以你必须试图解析值之前剥离其关闭).
基本上你这样做:
uint color; var hex = TextBox1.Text; if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) || hex.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase)) { hex = hex.Substring(2); } bool parsedSuccessfully = uint.TryParse(hex, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out color);
有关如何使用NumberStyles枚举的示例,请参阅此文章:http://msdn.microsoft.com/en-us/library/zf50za27.aspx
或者喜欢
string hexNum = "0xFFFF"; string hexNumWithoutPrefix = hexNum.Substring(2); uint i; bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);