如何用Tcl将二进制比特流分割为指定等长块?
Tcl分割二进制比特流为等长块的实现方法
这里提供两种实用的实现方式,都能满足你把比特流按指定长度(示例为4位)分割,最后不足长度的块保留原样的需求:
方法一:while循环逐块截取
这种方式逻辑直观,适合理解字符串处理的过程:
set bitstream "10101100100011101010111010" set block_size 4 set result_blocks [list] while {[string length $bitstream] > 0} { # 截取当前最多4位的块 set current_block [string range $bitstream 0 [expr {$block_size - 1}]] lappend result_blocks $current_block # 截断已处理的部分,更新剩余比特流 set bitstream [string range $bitstream $block_size end] } # 将结果列表转为空格分隔的字符串 puts [join $result_blocks " "]
你之前用for循环只拿到第一个块,大概率是没在循环里更新剩余的比特流,每次都从原字符串开头截取,导致重复获取第一个块。这个while循环每次处理后都会把已截取的部分去掉,自然能遍历所有块。
方法二:正则表达式快速匹配
如果追求简洁,可以用Tcl的正则表达式一步完成:
set bitstream "10101100100011101010111010" # 匹配1到4位的连续字符,-all表示匹配所有符合的部分,-inline返回匹配结果列表 set blocks [regexp -all -inline {.{1,4}} $bitstream] puts [join $blocks " "]
这两种方法运行后,都会输出你期望的结果:1010 1100 1000 1110 1010 1110 10
内容的提问来源于stack exchange,提问作者Sheetal Rana
相关产品推荐
相关产品推荐

