如何将hex值parsing为一个uint?
uint color; bool parsedhex = uint.TryParse(TextBox1.Text, out color); //where Text is of the form 0xFF0000 if(parsedhex) //...
不起作用。 我究竟做错了什么?
尝试
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
您可以使用一个重载的TryParse()
,它向TryParse
调用添加一个NumberStyle参数,该调用提供了hex值的parsing。 使用NumberStyles.HexNumber
它允许您传递string作为hex数字。
注意 : NumberStyles.HexNumber
的问题是它不支持使用前缀(即0x
, &H
或#
)parsing值,因此在parsing值之前必须将其去掉。
基本上你会这样做:
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);
这里是一个try-parse风格的函数:
private static bool TryParseHex(string hex, out UInt32 result) { result = 0; if (hex == null) { return false; } try { result = Convert.ToUInt32(hex, 16); return true; } catch (Exception exception) { return false; } }