I am working on code to parse Google Protocol Buffers
# find the var int starting at offset i # return tuple with new i and value proc getVarInt {i tl} { # split the data into a list of bytes set tl [split $tl {}] # return value set v 0 # place multiplier set mul 1 # pull the first byte (lsb) binary scan [lindex $tl $i] c b # check for multi-byte while {$b < 0} { set v [expr $v + ($b & 0x7f) * $mul] set mul [expr $mul * 128] incr i binary scan [lindex $tl $i] c b } set v [expr $v + $b * $mul] incr i return [list $i $v] }