Posted to tcl by evilotto at Thu Feb 20 18:05:56 GMT 2014view raw

  1. proc scan_bits {format data} {
  2. binary scan $data B* bitstring
  3. set rv {}
  4. set cursor 0
  5. foreach field $format {
  6. set tl [split $field :]
  7. set fmttype [lindex $tl 0]
  8. set len [lindex $tl 1]
  9. set mv [string range $bitstring $cursor $cursor+[expr {$len-1}]]
  10. set pbs [binary format b* [string reverse $mv]]
  11. binary scan $pbs\0\0\0 $fmttype ov
  12. lappend rv $ov
  13. incr cursor $len
  14. }
  15. return $rv
  16. }
  17.  
  18. # example
  19. scan_bits {i:4 i:4} => {4 1}