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


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

не работает. Что я делаю не так?

4 61
c#

4 ответа:

попробовать

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

вот это попробовать-разобрать функции типа:

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