uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
не работает. Что я делаю неправильно?
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
Вы можете использовать перегруженный 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
Или как
string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);
uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);
Вот функция стиля 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;
}
}