в основном:
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);
Ваша проблема в том, что 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);
Разбирать его по частям.
long l = (Long.parseLong("FFFFFFFFF",16)<<32) | Long.parseLong("FFFFFFFF",16);
В худшем случае вы можете проверить, есть ли строка это 16 символов, которые начинаются с 8-F, и если да, измените это на эквивалентный символ без набора наиболее значимых битов (т.е. вычтите 8 из этой цифры), проанализируйте результат и добавьте проанализированное значение к нижней границе длинного знака со знаком? (По сути, просто выполняю дополнение 2 самостоятельно.)