我想使用hessian从我的android客户端向PHP服务器发送一个双精度值,但是客户端上的writeDouble函数或服务器上的parseDouble函数都有错误。(我们正确地传输了许多不同的数据类型,只有这两种数据类型会给我们带来麻烦:)
双精度值为经度和纬度,例如:
android客户端发送: 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)))];
}发布于 2012-01-24 20:58:18
鉴于iOS是小端的,我认为您希望在double代码中以相反的顺序编码您的Java。
https://stackoverflow.com/questions/8986985
复制相似问题