Ответ 1
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
Как я могу преобразовать строковое значение типа "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, который не вызывает исключений.
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
От 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
}
Если вы удалите ведущий 0x, вы можете использовать int.Parse
int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier);
Прямо от SHanselman, как указано Кристи Диаконеску, ve включил основной исходный код:
public static T GetTfromString<T>(string mystring)
{
var foo = TypeDescriptor.GetConverter(typeof(T));
return (T)(foo.ConvertFromInvariantString(mystring));
}
Вся статья заслуживает более пристального взгляда!