我有一个用java编写的二进制文件。我想用python读取文件,并将每4个字节转换为浮点数。
前4个字节为 with tf.Session() as sess:
col1 = tf.add_to_collection('init',a )
sess.run(tf.variables_initializer(col1))
uninitializer_vars = []
for var in tf.global_variables():
try :
sess.run(var)
except tf.errors.FailedPreconditionError:
uninitializer_vars.append(var)
print(uninitializer_vars)
,但我通过代码读取bce9 1165
b'\xbc\xe9\x11e'
它与众不同!
然后我将它转换为with open(filename, "rb+") as f:
f.read(4)
。但是我得到了错误的浮动。
错误的浮点数为struct.unpack('f',data1)
。但它确实4.30659236383095e+22
那怎么解码呢?
答案 0 :(得分:2)
您的浮点数采用大端格式编码。要解码它,请struct.unpack
'>f'
格式字符串(>
明确告诉它使用big-endian格式,而不是系统的本机字节顺序):
>>> struct.unpack('>f', b'\xbc\xe9\x11e')
(-0.028450677171349525,)
答案 1 :(得分:0)
f.read(4) is your issue here
file.read最多读取大小字节并返回。Python Docs
您必须创建一个包装函数来读取确切的字节。
您可以从这里获得灵感:Check link