Python结构和Java中的读取值

Python结构和Java中的读取值,java,python,binary,Java,Python,Binary,例如,我想导出一个二进制格式,然后用Java读取二进制文件,但无法获得正确的值 f.write(struct.pack('<f', 21.988)) 您的Java应用程序正在使用相反的endianess;您正在编写little endian,但Java将该值解释为big endian: >>> struct.unpack('>f', struct.pack('<f', 21.988)) (8.962863280123082e+27,) 如果这不起作用,那么

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

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

您的Java应用程序正在使用相反的endianess;您正在编写little endian,但Java将该值解释为big endian:

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

如果这不起作用,那么还有其他原因导致您的输出没有被正确解释。对于endian的定义非常清楚,它应该全部用big-endian编码。

您是否查看了文件编码以确保它以完全相同的格式读取这两个文件?Mike I使用库的一部分编辑了文章,它使用默认的Java流并读取字节。您在python中打开的文件是“wb”正确吗?这是python中的二进制模式(仅在windows上需要,但应保留为跨平台支持)。谢谢,但我导出到Java,正如@martin所写的,这是大/小尾端的问题。@daniel:然后研究源代码,我将您链接到更多的源代码。“它确实使用了big-endian包装和解包。”马丁,我以前学习过,在3天的研究和测试中。我没说你没有。但您需要将您的输出与该库的输出进行比较。切换到little endian并不能解决您的问题。谢谢@martin,您的答案是正确的,但我不知道其他部分仍然使用little endian,但使用big endian的浮点数,它可以工作,f.write(struct.pack('字符只有一个字节长,所以endian之间没有区别。
struct.pack('s',b“vert”)
>>> struct.unpack('>f', struct.pack('<f', 21.988))
(8.962863280123082e+27,)
struct.pack('>f', 21.988)