Как разобрать шестнадцатеричные значения в uint?

uint color; 
bool parsedhex = uint.TryParse(TextBox1.Text, out color); 
//where Text is of the form 0xFF0000
if(parsedhex)
   //...

не работает. Что я делаю неправильно?

Ответ 1

Попробуйте

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

Ответ 2

Вы можете использовать перегруженный 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

Ответ 3

Или как

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

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

Ответ 4

Вот функция стиля 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;
        }
    }