uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
不起作用。我究竟做錯了什麼?如何將十六進制值解析爲uint?
uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
不起作用。我究竟做錯了什麼?如何將十六進制值解析爲uint?
嘗試
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:/ /Taskoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460 – Triynko 2011-10-26 16:43:04
或者像
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/en-us/library/zf50za27.aspx
這是一個嘗試,解析式的功能:
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;
}
}
這是什麼語言?這個語言的標籤怎麼樣? – 2008-09-19 01:13:11
它看起來像C#一樣強大,而迄今爲止的答案是這樣對待它,但是,是的,標籤本來就是一個非常好的主意。 – 2008-09-19 01:20:20