uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
nie działa. Co ja robię źle?Jak przeanalizować wartości heksadecymalne w uint?
uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
nie działa. Co ja robię źle?Jak przeanalizować wartości heksadecymalne w uint?
Spróbuj
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
Coś, o czym należy pamiętać (chociaż może nie mieć zastosowania do tej konkretnej konwersji liczby całkowitej) ... jeśli dane wejściowe są złe, Convert.ToUInt32 może być wolniejsze o rząd wielkości niż UInt32.TryParse, np. Convert.ToDouble vs Double.TryParse: http://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586539#586539 Ponadto nie zawsze jest jasne, co konwertuje: http://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460 – Triynko
Jak powiedział @Triynko, jest to błędny proces, ponieważ jest odpowiedzialny rzucać wyjątki. uint.TryParse byłby lepszy, ponieważ zwraca wartość logiczną wskazującą powodzenie lub niepowodzenie, zamiast rzucać wyjątek. – Zenexer
To podejście z 'Convert.ToUInt32' obsłuży prefiks" 0x "jako część danych wejściowych. –
Albo jak
string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);
uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);
Można użyć przeciążony TryParse()
który dodaje parametr NumberStyle na wezwanie TryParse
który zapewnia parsowania wartości szesnastkowych. Użyj NumberStyles.HexNumber
, który pozwala ci przekazać ciąg jako liczbę szesnastkową.
Uwaga: Problemem jest to, że NumberStyles.HexNumber
nie wsparcia wartości analizowania z prefiksem (tj 0x
, &H
lub #
.), Więc trzeba się rozebrać go przed próbą analizować wartość .
Zasadniczo chcesz to zrobić:
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);
Zobacz ten artykuł na przykład jak używać wyliczenie NumberStyles: http://msdn.microsoft.com/en-us/library/zf50za27.aspx
-1 nie działa: zobacz przykład MSDN link yo! "Nie powiodła się próba konwersji" 0x80C1 "." – peenut
Masz rację! Aby zanalizować liczbę szesnastkową, taką jak "0x80C1", musielibyśmy usunąć część "0x". Zaktualizowałem próbkę kodu poprawnie. Dzięki. –
-1 usunięte: zaktualizowany komentarz – peenut
Oto funkcja styl 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;
}
}
jaki to jest język? Co powiesz na tag dla tego języka? –
Wygląda na potężny jak C#, a jedna odpowiedź do tej pory potraktowała to w ten sposób, ale tak, tag byłby naprawdę dobrym pomysłem. –