Posted to tcl by evilotto at Thu Feb 20 18:05:56 GMT 2014view raw
- proc scan_bits {format data} {
- binary scan $data B* bitstring
- set rv {}
- set cursor 0
- foreach field $format {
- set tl [split $field :]
- set fmttype [lindex $tl 0]
- set len [lindex $tl 1]
- set mv [string range $bitstring $cursor $cursor+[expr {$len-1}]]
- set pbs [binary format b* [string reverse $mv]]
- binary scan $pbs\0\0\0 $fmttype ov
- lappend rv $ov
- incr cursor $len
- }
- return $rv
- }
- # example
- scan_bits {i:4 i:4} => {4 1}