On Tue, 09 Aug 2005 21:50:06 -0000, Grant Edwards <[EMAIL PROTECTED]> wrote:
>On 2005-08-09, Scott David Daniels <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list