How to extract/convert data from blender cache files .bphys into a human readable form via python I am trying to extract position, velocity and rotation data from smoke simulation cache files .bphys. 

i have been attempting to convert the .bphys file  into a more human readable form via python. With the eventual goal of using the location velocity and rotation data to create an .fga vector field that could be imported into unreal engine 4. 
If someone could tell me how to convert the binary data into usable (human readable) float values using python that would be amazing. 
I am having problems separating the data properly into floats.

(here is an overview of the contents of the files.  https://developer.blender.org/rBAC17a9b3e44ca0e48ef0244df19f2f252198a56919 ) 

(additional info)
struct.unpack is currenly what i have been trying to use. however there seems to be some non float data at the start of the file. 
i have not been able to work out exactly where it ends, and i think it might be throwing off the unpack. 
also unpacking with "f" 

struct.unpack("f",file.read(4)

is resulting in strings of numbers with what i assume to be scientific notation at the end (**10) e.g 4.203895289274451e-45,
which do not look like the sort of values i was expecting to find. 

Thanks
the first 9 bytes of the bphys file is the Header of the file. the first 8 are 'BPHYSICS' after which there is a unsigned int describing the type of data:

0 softbody
1 particles
2 cloth
3 smoke_domain
4 smoke_highres
5 dynamicpaint
6 rigidbody 


the link you posted is in relation to Particles, so i will assume you are only looking at accessing the particle data.

after the header, each particle has the following data:

index , 4
location , 12 
velocity , 12 
rotation , 16 
avelocity , 12
size , 4
times , 12
boids , 20


however, the pointcache reader will only write/read boid data if the particle system has boids enabled. so if you're not using boids, you just dont read that data.

assuming there is no boid data you will want to read the following data:

unsigned int, // BPHYS_DATA_INDEX
3 * float, // BPHYS_DATA_LOCATION
3 * float, // BPHYS_DATA_VELOCITY
4 * float, // BPHYS_DATA_ROTATION
3 * float, // BPHYS_DATA_AVELOCITY / BPHYS_DATA_XCONST
float, // BPHYS_DATA_SIZE
3 * float, // BPHYS_DATA_TIMES  


all this information can be found in 
pointcache.c file in blender's code.