Anyone recognize this numeric storage format - similar to "float", but not quite

Bengt Richter bokr at oz.net
Wed Aug 24 11:41:50 CEST 2005


On 23 Aug 2005 19:04:45 -0700, geskerrett at hotmail.com wrote:

>We are working on a project to decipher a record structure of an old
>accounting system that originates from the late80's mid-90's.
>We have come across a number format that appears to be a "float" but
>doesn't match any of the more standard implementations.
>so we are hoping this is a recognizable number storage format with an
>identifiable name AND pre-built conversion method
>similiar to the "struct" modules available in python.
>
>Here is what we have determined so far.
>
>Example Number: 1234567890
>
>This get stored on disk as 8 bytes, resulting in the following HEX
>characters;
>00 00 00 A4 05 2c 13 9f
>
>If we changed the order so that it is "little Endian" we get;
>9F 13 2c 05 A4 00 00 00
>
>If the HEX is converted to binary it looks like;
>10011111 00010011 00101100 00000101 10100100 00000000 000000000
>00000000
>
>If the example number 1234567890 is converted to binary it looks like;
>
>10010011 00101100 00000101 1010010
>
>To extract the example number, you need to do the following;
>1) take the decimal value of the first byte and subtract 128
>2) This tells you how many of the following bits to are significant and
>must be read
>3) Once the remaining bits are read, reverse the first bit of that
>group (ie if it is a 0 make it a 1)
>4) convert the result to decimal
>... and presto, the example number !
>
>Using a fixed width font it is easy to see the match at the bit level;
>
>10011111 00010011001011000000010110100100000000000000000000000000
>-------- 1001001100101100000001011010010
>
>
>If you are interested, the following are three other examples;
>
>    Orig Hex: 00 00 00 60 92 96 72 A0
>Actual Value: 4069954144
>
>    Orig Hex: 00 00 80 22 A3 26 3C A1
>Actual Value: 6313297477
>
>
>So ... does anyone recognize this ??
>Is there a "built-in" conversion method in Python  ??
>
>Thanks in advance.
>
Not looking too closely, but I recall something similar (although I suspect that the bit you
are "reversing" is a sign bit that shadows a known constant MSB 1 for non-zero numbers, and
shouldn't just be reversed):

http://groups.google.com/group/comp.lang.python/browse_thread/thread/42150ccc20a1d8d5/4aadc71be8aeddbe#4aadc71be8aeddbe

Regards,
Bengt Richter



More information about the Python-list mailing list