Reputation: 16359
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.
Upvotes: 3
Views: 5011
Reputation: 16359
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.
Upvotes: 5