Подтвердить что ты не робот

Преобразуйте строку, содержащую шестнадцатеричное значение, начинающееся с "0x", до целого или длинного

Как я могу преобразовать строковое значение типа "0x310530" в целочисленное значение в С#?

Я пробовал int.TryParse(и даже int.TryParse с System.Globalization.NumberStyles.Any), но он не работает.

UPDATE: Кажется, что Convert.ToInt64 или Convert.ToInt32 работают без необходимости удаления конечного "0x":

long hwnd = Convert.ToInt64("0x310530", 16);

В документации Convert.ToInt64 Method (String, Int32) говорится:

"Если fromBase равно 16, вы можете префикс числа, указанного значением параметр с "0x" или "0X".

Однако, я бы предпочел такой метод, как TryParse, который не вызывает исключений.

4b9b3361

Ответ 1

int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");

Ответ 2

От MSDN:

NumberStyles.AllowHexSpecifier

Указывает, что числовая строка представляет шестнадцатеричное значение. Действующие шестнадцатеричные значения включают числовые цифры 0-9 и шестнадцатеричные цифры A-F и a-f. Строки, которые анализируются с использованием этого стиля , не могут иметь префикс с помощью "0x" или "& h".

Итак, сначала нужно снять префикс 0x:

string s = "0x310530";
int result;

if (s != null && s.StartsWith("0x") && int.TryParse(s.Substring(2),
                                                    NumberStyles.AllowHexSpecifier,
                                                    null,
                                                    out result))
{
    // result == 3212592
}

Ответ 3

Если вы удалите ведущий 0x, вы можете использовать int.Parse

int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier);

Ответ 4

Прямо от SHanselman, как указано Кристи Диаконеску, ve включил основной исходный код:

public static T GetTfromString<T>(string mystring)
{
   var foo = TypeDescriptor.GetConverter(typeof(T));
   return (T)(foo.ConvertFromInvariantString(mystring));
}

Вся статья заслуживает более пристального взгляда!