Perl十进制到二进制转换

时间:2014-08-10 18:25:38

标签: perl printf

我需要在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)
}

我可以在我的打印语句中使用解决方法,但如果我可以执行上述操作,代码会更清晰。

2 个答案:

答案 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