gpt4 book ai didi

java - Python 结构体和读取 Java 中的值

转载 作者:行者123 更新时间:2023-12-01 13:51:19 28 4
gpt4 key购买 nike

我想导出二进制格式,然后用 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')
.....

最佳答案

您的 Java 应用程序正在使用相反的字节顺序;您正在编写小端字节序,但 Java 将该值解释为大端字节序:

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

写入大端字节序,Java 将正确读取值:

struct.pack('>f', 21.988)

如果这不起作用,则有其他原因导致您的输出无法正确解释。 UBJSON specification关于字节序已经很清楚了,应该都是大字节序编码。

关于java - Python 结构体和读取 Java 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936178/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com