All pastes #92300 Raw Edit

sauer_uint

public python v1 · immutable
#92300 ·published 2006-07-19 13:00 UTC
rendered paste body
def to_uint(array, pos=0):	for i in range(len(array)) :		array[i] = array[i] & 0xFF		#byte 1	n = array[pos]	if (not (n & (1 << 7))):		return n, pos+1	n -= (1 << 7)		#byte 2	n = n | (array[pos+1] << 7)	if (not (n & (1 << 14))):		return n, pos+2	n -= (1 << 14)		#byte 3	n = n | (array[pos+2] << 14)	if (not (n & (1 << 21))):		return n, pos+3	n -= (1 << 21)		#byte 4	n = n | (array[pos+3] << 21)	#Negative numbers	if (n & (1 << 28)):		n -= (1 << 28);		n = -( (~n & 0x0FFFFFFF) + 1)	return n, pos+4def from_uint(n) :	if (n < 0) or (n >= (1 << 21)) :			return [0x80 | (n & 0x7F),				0x80 | ((n>>7) & 0x7F),				0x80 | ((n>>14) & 0x7F),				0x80 | ((n>>21) & 0xFF)]	elif n < (1<<7) :		return [n]	elif n < (1<<14) :		return [0x80 | (n & 0x7F),				n >> 7]	else :		return [0x80 | (n & 0x7F),				0x80 | ((n>>7) & 0x7F),				n>>14]print from_uint(5)print to_uint([5])print from_uint(100)print to_uint([100])print from_uint(255)print to_uint([255, 1])print from_uint(1000)print to_uint([232, 7])print from_uint(-1)print to_uint([255, 255, 255, 255])print from_uint(-666)print to_uint([230, 250, 255, 255])print from_uint(-1234)print to_uint([174, 246, 255, 255])print from_uint(-9999)print to_uint([241, 177, 255, 255])print to_uint([225, 65])print to_uint([142, 2])print to_uint([-128, 64])print to_uint([-31, 65])