Как анализировать отрицательный долго в шестнадцатеричном числе в Java

в основном:

using System.Net;
using System.Net.Http;  // in LINQPad, also add a reference to System.Net.Http.dll

WebRequest req = HttpWebRequest.Create("http://google.com");
req.Method = "GET";

string source;
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
{
    source = reader.ReadToEnd();
}

Console.WriteLine(source);
11
задан ZZ Coder 11 September 2009 в 10:27
поделиться

3 ответа

Ваша проблема в том, что parseLong () не обрабатывает дополнение до двух - он ожидает, что знак будет представлен в виде '-'.

Если вы вы разрабатываете профиль CDC, вы можете просто использовать

long l = new BigInteger("FFFFFFFFFFFFFFFF", 16).longValue()

Но профиль CLDC не имеет этого класса. Там самый простой способ сделать то, что вам нужно, - это, вероятно, разделить длинный, проанализировать его на две половины и рекомбинировать их. Это работает:

long msb = Long.parseLong("FFFFFFFF", 16);
long lsb = Long.parseLong("FFFFFFFF", 16);
long result = msb<<32 | lsb;

ОБНОВЛЕНИЕ

Начиная с Java 8, вы можете использовать parseUnsignedLong () :

long l = Long.parseUnsignedLong("FFFFFFFFFFFFFFFF", 16);
21
ответ дан 3 December 2019 в 03:18
поделиться

Разбирать его по частям.

    long l = (Long.parseLong("FFFFFFFFF",16)<<32) | Long.parseLong("FFFFFFFF",16);
7
ответ дан 3 December 2019 в 03:18
поделиться

В худшем случае вы можете проверить, есть ли строка это 16 символов, которые начинаются с 8-F, и если да, измените это на эквивалентный символ без набора наиболее значимых битов (т.е. вычтите 8 из этой цифры), проанализируйте результат и добавьте проанализированное значение к нижней границе длинного знака со знаком? (По сути, просто выполняю дополнение 2 самостоятельно.)

0
ответ дан 3 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: