0

我想导出二进制格式,然后我用 Java 读取二进制文件,但我无法获得正确的值,例如

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

在 Java 中我有这个值:8.962863E27

我尝试发送一个二进制文件并将输出匹配到用java编写的ubjson库,起初我使用Big-endian标记但不起作用,当我使用Little-endian时它就像那样工作。

感谢您的任何指导。

编辑:图书馆的一部分

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 应用程序使用相反的字节序;您正在编写 little-endian,但 Java 将值解释为 big endian:

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

编写 big-endian 和 Java 将正确读取值:

struct.pack('>f', 21.988)

如果这不起作用,还有其他原因导致您的输出未正确解释。UBJSON规范对字节序非常清楚,它都应该被编码为大字节序。

于 2013-11-12T17:44:16.563 回答