我正在尝试制作一个程序,将十进制数字或文本转换为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;
}
答案 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";