How to parse hex values into a uint?
1 2 3 4 5
| uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//... |
不起作用。我在做什么错?
尝试
1
| Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment |
您可以使用重载的TryParse(),该重载将NumberStyle参数添加到TryParse调用中,该调用提供对十六进制值的解析。使用NumberStyles.HexNumber允许您将字符串作为十六进制数字传递。
注意:NumberStyles.HexNumber的问题在于它不支持解析带有前缀的值(即0x,&H或#),因此您必须先将其剥离解析值。
基本上,您会这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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/zh-cn/library/zf50za27.aspx
或者像
1 2 3 4 5
| string hexNum ="0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);
uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i); |
这是一个try-parse样式函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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;
}
} |
|