我需要在Perl中将数字从十进制转换为二进制,其中我的约束是二进制数宽度由变量设置:
for (my $i = 0; $i<32; $i++)
{
sprintf("%b",$i) # This will give me a binary number whose width is not fixed
sprintf("%5b",$i) # This will give me binary number of width 5
# Here is what I need:
sprintf (%b"$MY_GENERIC_WIDTH"b, $i)
}
我可以在我的打印语句中使用解决方法,但如果我可以执行上述操作,代码会更清晰。
答案 0 :(得分:5)
您的问题等于以下内容:
如何构建
%5b
可变的字符串5
?
使用连接。
"%".$width."b"
也可以写成
"%${width}b"
在更复杂的情况下,您可能希望使用以下内容,但这里过于苛刻。
join('', "%", $width, "b")
请注意,sprintf
接受*
作为占位符,以便在变量中提供值。
sprintf("%*b", $width, $num)
如果您想要前导零而不是前导空格,只需在0
之后立即添加%
。
答案 1 :(得分:4)
您可以将宽度插入格式字符串:
my $width = 5;
for my $i (0..31) {
printf "%${width}b\n", $i;
}
或使用*
通过变量输入:
my $width = 5;
for my $i (0..31) {
printf "%*b\n", $width, $i;
}
两个输出:
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111