Как мне преобразовать десятичные числа в двоичные в Perl? - PullRequest
13 голосов
/ 12 мая 2010

Я пытаюсь создать программу, которая преобразует десятичные числа или текст в двоичные числа в 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 ]

25 голосов
/ 12 мая 2010

$decimal/2; не влияет $decimal

Вы, вероятно, хотите $decimal /= 2; или если вы хотите быть крутым, тогда $decimal >>= 1;

Но на самом деле, действительно, вы, вероятно, просто хотите:

printf "%b\n", $decimal;

11 голосов
/ 07 июня 2013

Попробуйте это для десятичного-двоичного преобразования:

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

Чтобы получить каждый бит:

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

Затем вы можете манипулировать каждым битом, изменять индекс MSB и т. Д.

8 голосов
/ 16 мая 2010

У меня есть эти псевдонимы в моем .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 )'"
8 голосов
/ 12 мая 2010

Существует несколько методов преобразования десятичных чисел в двоичные, перечисленные в perlfaq4 ( Как преобразовать числовые представления / базы / радиксы? ).

sprintf - хороший выбор.

0 голосов
/ 01 апреля 2018

Я использовал этот код для преобразования десятичного числа в двоичное, надеюсь, это поможет:

print "Enter a number to convert: ";
chomp($decimal = <STDIN>);
print "\nConverting $number to binary...\n";
$ans=0;$i=1;
while($decimal > 0)
{
    $remainder = $decimal%2;
    $ans=$ans+$remainder*$i;
    $i=$i*10;
    $decimal >>= 1
}
print $ans
0 голосов
/ 07 июня 2015

Пожалуйста, попробуйте следующий код. Это будет работать.

#!/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";
0 голосов
/ 04 апреля 2013
#!/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";
0 голосов
/ 29 сентября 2012
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)))'"
...