Does any one recognize this binary data storage format
Bengt Richter
bokr at oz.net
Tue Aug 9 23:47:06 EDT 2005
On Tue, 09 Aug 2005 21:50:06 -0000, Grant Edwards <grante at visi.com> wrote:
>On 2005-08-09, Scott David Daniels <Scott.Daniels at Acm.Org> wrote:
>> Grant Edwards wrote:
>>>>Ex #1) 333-3333
>>>>Hex On disk: 00 00 00 80 6a 6e 49 41
>>>>
>>>>Ex #2) 666-6666
>>>>Hex On disk: 00 00 00 80 6a 6e 59 41
>>>
>>> So there's only a 1-bit different between the on-disk
>>> representation of 333-3333 and 666-6666.
>>>
>>> That sounds pretty unlikely. Are you 100% sure you're looking
>>> at the correct bytes?
>>
>> Perhaps the one bit is an exponent -- some kind of floating point
>> based format? That matches the doubling of all digits.
>
>That would just be sick. I can't imagine anybody on an 8-bit
>CPU using FP for a phone number.
>
>--
>Grant
>
>>> def double_binary_lehex_to_double(dhex):
... "convert little-endian hex of ieee double binary to double"
... assert len(dhex)==16, (
... "hex of double in binary must be 8 bytes (hex pairs in little-endian order")
... dhex = ''.join(reversed([dhex[i:i+2] for i in xrange(0,16,2)]))
... m = int(dhex, 16)
... x = ((m>>52)&0x7ff) - 0x3ff - 52
... s = (m>>63)&0x1
... f = (m & ((1<<52)-1))|((m and 1 or 0)<<52)
... return (1.0,-1.0)[s]*f*2.0**x
...
>>> double_binary_lehex_to_double('000000806a6e4941')
3333333.0
>>> double_binary_lehex_to_double('000000806a6e5941')
6666666.0
>>> double_binary_lehex_to_double('0000108777F9Fc41')
7777777777.0
;-)
Regards,
Bengt Richter
More information about the Python-list
mailing list