如何将十六进制值解析为一个uint?

时间:2020-03-06 14:24:15  来源:igfitidea点击:
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

或者喜欢

string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);

uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);

我们可以使用重载的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/zh-cn/library/zf50za27.aspx