Domanda

I am writing a float32 to a file with numpy's tofile().

float_num = float32(3.4353)
float_num.tofile('float_test.bin')

It can be read with numpy's fromfile(), however that doesn't suit my needs and I have to read it as a raw binary with the help of the bitstring module.

So I do the following:

my_file = open('float_test.bin', 'rb')
raw_data = ConstBitStream(my_file)
float_num_ = raw_data.readlist('float:32')

print float_num
print float_num_

Output:

3.4353
-5.56134659129e+32

What could be the cause? The second output should also be 3.4353 or close.

È stato utile?

Soluzione

The problem is that numpy's float32 is stored as little endian and bitstrings default implementation is bigendian. The solution is to specify little endian as the data type.

my_file = open('float_test.bin', 'rb')
raw_data = ConstBitStream(my_file)
float_num_ = raw_data.readlist('floatle:32')

print float_num
print float_num_

Output:

3.4353
3.43530011177

Reference on bitstring datatypes, here.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top