java - 使用 hessian 从 android 发送 double 到 php 时出现解析错误

标签 java php hessian

我想使用 hessian 将 double 值从 Android 客户端发送到 PHP 服务器,但客户端上的 writeDouble 函数或服务器上的 parseDouble 函数有错误。 (我们正确地传输了许多不同的数据类型,只有 double 给我们带来了麻烦:))

double 值是经度和纬度,例如:

从Android客户端发送:14,30485725402832

服务器收到:1.0474191691834E-321

安卓编码:

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)))];
}

最佳答案

鉴于 iOS 是小端字节序,我认为您希望在 Java 代码中以相反的顺序对 double 进行编码。

关于java - 使用 hessian 从 android 发送 double 到 php 时出现解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986985/

相关文章:

java - scanner.hasNext() 导致无限循环

java - Epson SDK 版本 2 收银抽屉适用于 Android?

php - 如何使用对象方法作为回调函数

hessian - 开始使用 Hessian

java - java中的一维数组到二维数组

java - 使用 REST 调用将本地对象的范围与服务器对象进行匹配

php - 如何获取 PHP 脚本以在 li 元素中生成 javascript

javascript - 使用与 Java 中相同的 PHP 加密方法

machine-learning - 如何在pytorch中计算网络中所有参数的hessian矩阵?

python - XGBoost python 自定义目标函数