def decode7bit(bytes):
bytes = list(bytes)
value = 0
shift = 0
while True:
byteval = ord(bytes.pop(0))
if(byteval & 128) == 0: break
value |= ((byteval & 0x7F) << shift)
shift += 7
return (value | (byteval << shift))
def encode7bit(value):
temp = value
bytes = ""
while temp >= 128:
bytes += chr(0x000000FF & (temp | 0x80))
temp >>= 7
bytes += chr(temp)
return bytes
x = encode7bit(345)
print decode7bit(x)
Wednesday, April 27, 2011
7 Bit Integer compression, in Python.
Subscribe to:
Post Comments (Atom)
Popular Posts
-
These are the robots I've been working on for the last 12 months. They each weigh about 11 tonnes and have a 17 meter reach. The control...
-
So, you've created a car prefab using WheelCollider components, and now you can apply a motorTorque to make the whole thing move along. ...
-
I have just spent an hour trying to track down a weird bug in some Javascript interpolation code. The offending code looks like this: var n ...
-
Why would I ask that question? Python 3 has been available for some time now, yet uptake is slow. There aren't a whole lot of packages i...
-
Dear Lazyweb. Imagine a nice RESTful interface for working with Tags. The URL: /tags/ will return a list of all the tags. The URL: /tags/fo...
-
After my last post, I decided to benchmark the scaling properties of Stackless, Kamaelia, Fibra using the same hackysack algorithm. Left axi...
-
I've just uploaded Fibra 2 to the cheeseshop. Fibra 2 includes the promised non-blocking plugin, which allows a generator based task to...
-
The procedural planet package has been updated to version 1.4, and you can see the new demo here . It features better city light control, be...
-
I've just finished refactoring an awful C# class. I had been delaying the job for a while because I didn't want to do it. Then, whil...
-
I've built sites with Django, TurboGears and Pylons. I've come to prefer Pylons. Why? Pylons gets out of the way, and stays out of t...
3 comments:
I have code very similar to this in my SMS PDU transcoder library (which I really must release some day as it's way more complete than anything else out there). Yay for looooong ints :-)
Here aer some other places where these methods are used :-
FAST - http://www.fixprotocol.org/documents/3066/FAST%20Specification%201%20x%201.pdf
Protocol Buffers - http://code.google.com/apis/protocolbuffers/docs/encoding.html
And another implementation: http://twistedmatrix.com/trac/browser/trunk/twisted/spread/banana.py?rev=30752#L24 and a variation which tries to be faster: http://twistedmatrix.com/trac/attachment/ticket/2310/banana_speed.2.py
Post a Comment