python - Decoding an IEEE double precision float (8 byte) -


i'm decoding amf0 format file. data i'm looking timestamp, encoded array. [hh, mm, ss].

since data amf0, can locate start of data reading in file bytes, converting each byte hex, , looking signal 08 00 00 00 03, array of length 3.

my problem don't know how decode 8-byte integer in each element of array. have data in same, hex-encoded format, e.g.:

08 00 00 00 03 *signals array length 3* 00 01 30 00 00 00 00 00 00 00 00 00 *signals integer* 00 01 31 00 00 00 00 00 00 00 00 00 *signals integer* 00 01 32 00 40 3c 00 00 00 00 00 00 *signals integer* 00 00 09 *signals object end* 

this should decoded [0, 0, 28] (if minerva believed).
i've been trying use struct.unpack, examples see 4-byte (little endian) values.

the format specifier looking ">9xd4xd4xd3x":

>>> import struct >>> binascii import unhexlify >>> struct.unpack(">9xd4xd4xd3x", unhexlify("080000000300013000000000000000000000013100000000000000000000013200403c000000000000000009")) (0.0, 0.0, 28.0) 

broken down:

  1. >: big endian format
  2. 5x: 5 bytes begin-of-array marker + size (ignored)
  3. 4x: 4 bytes begin-of-element marker (ignored)
  4. d: 1 big endian ieee-754 double
  5. points 2-3 other 2 elements
  6. 3x: 3 bytes end-of-array marker (ignored)

points 1. , 2. merged 9x.

as might have noticed, struct can ignore bytes, not validate. if need more flexibility in input format, use regex matching begin/end array markers in non-greedy mode.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -