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]
}