私のアンドロイドクライアントからhessianを使用してPHPサーバーにdouble値を送信したいが、クライアントのwriteDouble関数またはサーバーのparseDouble関数にエラーがある。hessianでアンドロイドからPHPにdoubleを送信するときに解析エラーが発生する
アンドロイドクライアントから送られてきた:
がで受信14,30485725402832
double値は、例えば、緯度と経度である(我々は:)、正しくのみダブルたちを与える問題が発生し、多くの異なるデータタイプを送信します)サーバ: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)))];
}
送信した値の例と受信した値の例を挙げることはできますか? –
また、正しく動作するiPhoneコードはどのように見えますか?私はそれがC言語であり、Javaの正確な複製ではないと仮定しています。 –
iphoneコードと送受信された二重値の例を質問に追加しました – qedejavu