Может ли какой-либо из методов .NET Parse обрабатывать шестнадцатеричную строку с префиксом «0x»? - PullRequest
9 голосов
/ 02 июня 2010

Я попытался проанализировать число с помощью метода .NET Int64.Parse, и он не будет принимать строку типа «0x3039», даже если вы так пишете константу в C #. Документация, в частности, запрещает строке иметь префикс «0x», и завершающий «h», похоже, тоже не работает.

Чтобы разобрать шестнадцатеричное число, я должен использовать опцию System.Globalization.NumberStyles.HexNumber.

Если кто-то наверняка знает, что Int64.Parse() не может принимать строки с префиксом "0x", пожалуйста, дайте мне знать.

Ответы [ 3 ]

17 голосов
/ 02 июня 2010

Документация дает выражения для поддерживаемых числовых форматов и, соответственно, ни префиксы, ни постфиксы не допускаются для шестнадцатеричных чисел.

Convert.ToInt32(String, Int32) поддерживает префиксы 0x и 0X при использовании базы 16.

2 голосов
/ 31 марта 2015

Извините за поздний ответ на старый вопрос, но этот вопрос был первым, который возник при поиске "[.net] 0x prefix".

Да, существует как минимум один набор стандартных функций .NET, которые правильно обрабатывают шестнадцатеричные строки, начинающиеся с префикса "0X".

Начиная с .NET Framework 1.1, классы Int64Converter, Int32Converter, Int16Converter и ByteConverter в пространстве имен System.ComponentModel принимают шестнадцатеричный префикс 0X как часть строки.

try
{
    // get integer value of strValue
    // assuming strValue has already been converted to uppercase e.g. by ToUpper()
    int intValue;
    if (strValue.StartsWith("0X"))
    {
        // support 0x hex prefix
        intValue = (Int16)new System.ComponentModel.Int16Converter().ConvertFromString(strValue);
    }
    else
    {
        // decimal
        intValue = int.Parse(strValue);
    }
}
catch (FormatException)
{
}

Ссылка на документацию MSDN: https://msdn.microsoft.com/en-us/library/system.componentmodel.int16converter(v=vs.71).aspx

2 голосов
/ 02 июня 2010

Нет, он не примет 0x. Есть даже опция AllowHexSpecifier, но по какой-то причине это просто означает цифры a-f и все еще ожидает от вас удаления части 0x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...