Я начал использовать.NET 4 Системы. Численные данные. Структура BigInteger и я встретились с проблемой.
Я пытаюсь проанализировать строку, которая содержит шестнадцатеричное число без (положительного) знака. Я получаю отрицательное число.
Например, я делаю следующие два утверждают:
Assert.IsTrue(System.Int64.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "Int64");
Assert.IsTrue(System.Numerics.BigInteger.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "BigInteger");
Первые утверждают, успешно выполняется, вторые утверждают сбои. Я на самом деле добираюсь-8 вместо 8 в BigInteger
.
Проблема, кажется, когда я - шестнадцатеричные запуски с 1 битом и не 0 битами (цифра между 8 и F включительно). Если я добавляю продвижение 0, все работает отлично.
Это - плохое использование с моей стороны? Действительно ли это - ошибка в BigInteger
?
Это именно то, что должен делать метод.
"Если значение является шестнадцатеричной строкой, то метод метод Parse(String, NumberStyles) интерпретирует значение как отрицательное число хранящееся с использованием двойного дополнения если его первые две шестнадцатеричные цифры больше или равны 0x80. Другими словами, метод метод интерпретирует старший бит первого байта в значении как бит знака. Чтобы убедиться, что шестнадцатеричная строка правильно интерпретируется как положительное число, то первая цифра в значении должна иметь значение нуля. Например, метод интерпретирует 0x80 как отрицательное значение, но он интерпретирует либо 0x080, либо 0x0080 как положительное значение."