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...
-
This hard-to-see screenshot is a Generic Node Graph Editing framework I'm building. I'm hoping it can be used for any kind of node...
-
So, you've created a car prefab using WheelCollider components, and now you can apply a motorTorque to make the whole thing move along. ...
-
MiddleMan: A Pub/Sub and Request/Response server in Go. This is my first Go project. It is a rewrite of an existing Python server, based o...
-
Often, when building a game, you need to test if objects are colliding. The objects could be spaceships, rocks, mouse pointers, laser beams....
-
I've just read a newspaper article (courtesy of Kranzky ) from WA Business News documenting the malfeasance, gross negligence and misc...
-
After my last post, I decided to benchmark the scaling properties of Stackless, Kamaelia, Fibra using the same hackysack algorithm. Left axi...
-
Possibly slightly more correct lighting. The rim light is now only applied in the direction of the sun, rather than being purely based on vi...
-
Update: This is another planet shader, with more physical fidelity. Shader "Planet" { Properties { _MainTex ("Diff...
-
At the last few GameJams, I've seen an increase in the use of RAD game tools, some of them even being developed by the participants them...
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