TCL 中的零填充
zero padding in TCL
我的 tcl 代码如下所示:
set writes 1a8000028020900
binary scan [binary format H* $writes] B* bits
puts "$bits"
输出:
0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
如果输入的十六进制值是偶数长度,则不会进行填充。如果它是奇数,就像上面的例子一样,零被填充。
如果格式化的位数没有在字节边界结束,则最后一个字节的剩余位将为零。 如何避免这种填充?
manual 页面显示:
如果 arg 少于 count 个数字,则剩余数字将使用零。
您提供的值未指定全部 64 位。 binary
命令无法猜测您想要的内容,并在提供的字符串末尾填充零。
编辑:
为避免这种情况,只需定义要转换的值中的所有位即可:
set writes 01a8000028020900
If the number of digits formatted does not end at a byte boundary, the
remaining bits of the last byte will be zeros. How to avoid this
padding?
好吧,您将不得不计算并告诉 binary scan
目标位数。也许有比这更优雅的方式,但为什么不直接DIY呢?
% set writes 1a8000028020900
1a8000028020900
% set hexLength [string length $writes]
15
% binary scan [binary format H* $writes] B[expr {$hexLength * 4}] bits
1
% puts $bits
000110101000000000000000000000101000000000100000100100000000
这里有一个关于填充源字符串的想法:
binary scan [binary format H* $writes] B* bits
puts "$bits"
binary scan [binary format H* [format "%016s" $writes]] B* bits
puts "$bits"
产出
0001101010000000000000000000001010000000001000001001000000000000
0000000110101000000000000000000000101000000000100000100100000000
我的 tcl 代码如下所示:
set writes 1a8000028020900
binary scan [binary format H* $writes] B* bits
puts "$bits"
输出:
0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
如果输入的十六进制值是偶数长度,则不会进行填充。如果它是奇数,就像上面的例子一样,零被填充。
如果格式化的位数没有在字节边界结束,则最后一个字节的剩余位将为零。 如何避免这种填充?
manual 页面显示:
如果 arg 少于 count 个数字,则剩余数字将使用零。
您提供的值未指定全部 64 位。 binary
命令无法猜测您想要的内容,并在提供的字符串末尾填充零。
编辑:
为避免这种情况,只需定义要转换的值中的所有位即可:
set writes 01a8000028020900
If the number of digits formatted does not end at a byte boundary, the remaining bits of the last byte will be zeros. How to avoid this padding?
好吧,您将不得不计算并告诉 binary scan
目标位数。也许有比这更优雅的方式,但为什么不直接DIY呢?
% set writes 1a8000028020900
1a8000028020900
% set hexLength [string length $writes]
15
% binary scan [binary format H* $writes] B[expr {$hexLength * 4}] bits
1
% puts $bits
000110101000000000000000000000101000000000100000100100000000
这里有一个关于填充源字符串的想法:
binary scan [binary format H* $writes] B* bits
puts "$bits"
binary scan [binary format H* [format "%016s" $writes]] B* bits
puts "$bits"
产出
0001101010000000000000000000001010000000001000001001000000000000
0000000110101000000000000000000000101000000000100000100100000000