Question

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.

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top