2008-09-19 82 views
61
uint color; 
bool parsedhex = uint.TryParse(TextBox1.Text, out color); 
//where Text is of the form 0xFF0000 
if(parsedhex) 
    //... 

不起作用。我究竟做錯了什麼?如何將十六進制值解析爲uint?

+1

這是什麼語言?這個語言的標籤怎麼樣? – 2008-09-19 01:13:11

+0

它看起來像C#一樣強大,而迄今爲止的答案是這樣對待它,但是,是的,標籤本來就是一個非常好的主意。 – 2008-09-19 01:20:20

回答

102

嘗試

Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment 
+5

需要記住的東西(儘管它可能不適用於此特定的整數轉換)...如果輸入不正確,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

11

或者像

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

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

您可以使用重載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

4

這是一個嘗試,解析式的功能:

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; 
     } 
    }