根据变量中的值在二进制数前附加0

时间:2019-03-26 07:23:26

标签: perl

我正在编写一个代码,其中我需要将某些形式的no转换为二进制no进行某些处理。我想要基于存储在变量中的值的二进制no的大小,为此我需要附加一些前导零。 例如,假设变量$ size = 15 现在我想将十进制的no转换为15位二进制

我知道如何手动计数 对于前- 如果我们要从小数点开始的8位二进制数否,那么我们将使用-

    $data_binary = sprintf( "%08b", $initial_data );

但是如果大小存储在某个变量中,如何指定二进制数的大小呢?

例如=

    If size =10
    decimal no =12
    required binary no = 0000001100

2 个答案:

答案 0 :(得分:1)

请参见perldoc -f sprintf

printf "%0*b\n", 10, 12

例如,

0000001100

打印

$size

如果您的数字的二进制表示形式包含超过substr位,则不会被截断。根据您的用例,您可能要在其后添加一个configure: creating ./config.status config.status: creating src/Makevars ** libs gcc -std=gnu99 -I/opt/microsoft/ropen/3.5.1/lib64/R/include -DNDEBUG -pthread -DU_STATIC_IMPLEMENTATION -fpic -DU_STATIC_IMPLEMENTATION -O2 -g -c tcltkimg.c -o tcltkimg.o tcltkimg.c:3:16: fatal error: tk.h: No such file or directory compilation terminated. /opt/microsoft/ropen/3.5.1/lib64/R/etc/Makeconf:159: recipe for target 'tcltkimg.o' failed make: *** [tcltkimg.o] Error 1 (但是如果您确实需要这样做,我会感到惊讶)。

答案 1 :(得分:-1)

您可以使用一个sprintf为另一个sprintf生成格式字符串。
[有多种方法可以做到这一点]

use strict; use warnings;
my $binary_length = 10;
my $initial_data = 12;

my $format = sprintf('%%0%db', int($binary_length));
my $data_binary = sprintf( $format, $initial_data );
print $data_binary,"\n";