Posted to tcl by crshults at Thu May 28 19:49:01 GMT 2015view pretty
proc lpop {the_list {number_to_pop 1}} { upvar 1 $the_list local_list set pop_list [lrange $local_list 0 $number_to_pop-1] set local_list [lrange $local_list $number_to_pop end] return $pop_list } proc convert_binary_to_bit_list {input} { binary scan $input B* bit_string split $bit_string "" } proc bassign {input fields_and_lengths} { set bit_list [convert_binary_to_bit_list $input] foreach {field length} $fields_and_lengths { uplevel "scan [join [lpop bit_list $length] ""] %b $field" } return [binary format B* [join $bit_list ""]] } #example: bassign \xfc\x1d {header 4 length 4 data 7 parity 1} puts $header puts $length puts $data puts $parity