0

バイナリ形式をエクスポートしたいのですが、Java でバイナリを読み取りますが、正しい値を取得できません。たとえば、

f.write(struct.pack('<f', 21.988))

Javaでは、次の値があります。8.962863E27

バイナリを送信して、出力をJavaで書かれたubjsonライブラリに一致させようとしましたが、最初はビッグエンディアンマークを使用していますが機能せず、リトルエンディアンを使用するとそのように機能します。

ガイドをありがとう。

編集:ライブラリの一部

public JsonValue parse(final DataInputStream din) throws IOException {
        return parse(din, din.readByte());
    }

    protected JsonValue parse(final DataInputStream din, final byte type) throws IOException {
        if (type == '[')
            return parseArray(din);
        else if (type == '{')
            return parseObject(din);
        else if (type == 'Z')
            return new JsonValue(JsonValue.ValueType.nullValue);
        else if (type == 'T')
            return new JsonValue(true);
        else if (type == 'F') 
                .....
4

1 に答える 1

1

Java アプリケーションは反対のエンディアンを使用しています。あなたはリトルエンディアンを書いていますが、Javaは値をビッグエンディアンとして解釈しました:

>>> struct.unpack('>f', struct.pack('<f', 21.988))
(8.962863280123082e+27,)

ビッグ エンディアンを記述すると、Java は値を正しく読み取ります。

struct.pack('>f', 21.988)

それでもうまくいかない場合は、出力が正しく解釈されない他の理由があります。UBJSON仕様はエンディアンについて非常に明確であり、すべてビッグエンディアンでエンコードする必要があります。

于 2013-11-12T17:44:16.563 に答える