Я хочу отправить двойное значение от моего клиента android на сервер PHP с использованием hessian, но либо функция writeDouble на клиенте, либо функция parseDouble на сервере имеет ошибку. (Мы передаем много различных типов данных, правильно, только двойной дать нам неприятности :))ошибка синтаксического анализа при отправке double из android в php с hessian
Двойные значения долготы и широты, например:
отправлено из андроида клиента: 14,30485725402832
получил в сервер: 1.0474191691834E-321
Android кодирования:
public void writeDouble(double value) throws IOException
{
long bits = Double.doubleToLongBits(value);
os.write('D');
os.write((byte) (bits >> 56));
os.write((byte) (bits >> 48));
os.write((byte) (bits >> 40));
os.write((byte) (bits >> 32));
os.write((byte) (bits >> 24));
os.write((byte) (bits >> 16));
os.write((byte) (bits >> 8));
os.write((byte) (bits));
}
PHP декодирование:
function parseDouble($code, $num){
$bytes = $this->read(8);
if(HessianUtils::$littleEndian)
$bytes = strrev($bytes);
$double = unpack("dflt", $bytes);
return $double['flt'];
}
кстати: у нас есть клиент iPhone отправить двойной - работает отлично ...
кодирования iphone:
(void)encodeDouble:(double)realv forKey:(NSString*)key;
{
if (key) [self writeTypedObject:key];
[self writeChar:'D'];
[self writeInt64:(int64_t)(*((double*)(&realv)))];
}
Можете ли вы привести пример значения, которое вы отправили, и того, что оно было получено как? –
Также, как выглядит правильно работающий код iPhone? Я предполагаю, что он находится в C и, следовательно, не является точным дубликатом Java ... –
Я добавил код iphone и пример отправленных/полученных двойных значений на вопрос – qedejavu