如何在Perl中将十进制数转换为二进制?

时间:2010-05-12 17:37:46

标签: perl algorithm binary decimal

我正在尝试制作一个程序,将十进制数字或文本转换为Perl中的二进制数字。程序要求用户输入字符或字符串,然后将结果打印到控制台。我该怎么做呢?我一直在研究的代码如下,但我似乎无法修复它。

print "Enter a number to convert: ";
chomp($decimal = <STDIN>);
print "\nConverting $number to binary...\n";
$remainder = $decimal%2;
while($decimal > 0)
{
    $decimal/2;
    print $remainder;
}

8 个答案:

答案 0 :(得分:25)

$decimal/2;不影响$decimal

您可能想要$decimal /= 2;,或者如果您想要冷静,那么$decimal >>= 1;

但实际上,你可能只是想要:

printf "%b\n", $decimal;

答案 1 :(得分:11)

尝试使用十进制到二进制转换:

my $bin = sprintf ("%b", $dec);

获得每一位:

my @bits = split(//, $bin);

然后你可以操作每个位,改变MSB索引等等。

答案 2 :(得分:8)

perlfaq4中列出了几种从十进制转换为二进制的方法 (How do I convert between numeric representations/bases/radixes?)。

sprintf是个不错的选择。

答案 3 :(得分:8)

我在 .bash_profile 中有这些别名,可以在命令行上快速转换:

# from-decimal
alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"
# from-hex
alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"
# from-octal
alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"
# from-binary
alias b2h="perl -e 'printf qq|%X\n|, oct( q|0b| . shift )'"
alias b2d="perl -e 'printf qq|%d\n|, oct( q|0b| . shift )'"
alias b2o="perl -e 'printf qq|%o\n|, oct( q|0b| . shift )'"

答案 4 :(得分:0)

alias b2d="perl -e 'printf qq|%d\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2h="perl -e 'printf qq|%X\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2o="perl -e 'printf qq|%o\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"

答案 5 :(得分:0)

#!/usr/bin/perl
use strict;
print "Enter a number to convert: ";
chomp(my $decimal = <STDIN>);

print "\nConverting $decimal to binary...\n";

my @array;
my $num;

while($decimal >= 1)
{
    if($decimal == 1) {

        $num .= 1;
        last;
    }

    my $remainder = $decimal%2;
    $num .= $remainder;
    $decimal = $decimal/2;
}

print $num."\n";

答案 6 :(得分:0)

我使用此代码将十进制转换为二进制,希望它有所帮助:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, REQUEST_CODE);

答案 7 :(得分:-2)

请尝试以下代码。它会起作用。

#!/usr/bin/perl

use strict;

print "Enter a decimal number \n";

my $dec_number = <STDIN>;
chomp($dec_number);

my $reminder;
my $result;

while ($dec_number >= 1)
{
    $reminder = $dec_number % 2;       #Modulo division to get remainder
    $result = $reminder . $result;     #Concatenation of two numbers
    $dec_number = $dec_number / 2;     #New Value of decimal number to do next set of above operations
}

print "Binary number Output = ", $result, "\n";