Преобразовать строку, содержащую шестнадцатеричное значение, начинающееся с «0x», в целое или длинное число - PullRequest
18 голосов
/ 25 ноября 2010

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

Я пытался 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, который не вызывает исключений.

Ответы [ 4 ]

24 голосов
/ 25 ноября 2010
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
13 голосов
/ 25 ноября 2010

С 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
}
2 голосов
/ 16 февраля 2015

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

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

Вся статья заслуживает более внимательного изучения!

2 голосов
/ 25 ноября 2010

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

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