Как преобразовать десятичные числа в двоичный код в Perl?

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

Ответ 1

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

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

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

printf "%b\n", $decimal;

Ответ 2

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

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

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

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

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

Ответ 4

У меня есть эти псевдонимы в моем .bash_profile для быстрых преобразований в командной строке:

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 )'"
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 )'"
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 )'"

Ответ 5

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)))'"

Ответ 6

#!/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";

Ответ 7

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

#!/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";