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+4 def 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])