How do I convert decimal numbers to binary in Perl?
我正在尝试制作一个在Perl中将十进制数字或文本转换为二进制数字的程序。该程序要求用户输入字符或字符串,然后将结果打印到控制台。我该怎么做呢?我一直在处理的代码如下,但似乎无法修复。
1 2 3 4 5 6 7 8 9 10 11 |
您可能想要
但是真的,真的,您可能只想要:
", $decimal;
尝试此操作以进行十进制到二进制的转换:
1 |
获取每个位:
1 |
然后,您可以操纵每个位,更改MSB索引等。
我在.bash_profile中具有这些别名,以便在命令行上进行快速转换:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # from-decimal alias d2h="perl -e 'printf qq|%X\ |, int( shift )'" alias d2o="perl -e 'printf qq|%o\ |, int( shift )'" alias d2b="perl -e 'printf qq|%b\ |, int( shift )'" # from-hex alias h2d="perl -e 'printf qq|%d\ |, hex( shift )'" alias h2o="perl -e 'printf qq|%o\ |, hex( shift )'" alias h2b="perl -e 'printf qq|%b\ |, hex( shift )'" # from-octal alias o2h="perl -e 'printf qq|%X\ |, oct( shift )'" alias o2d="perl -e 'printf qq|%d\ |, oct( shift )'" alias o2b="perl -e 'printf qq|%b\ |, oct( shift )'" # from-binary alias b2h="perl -e 'printf qq|%X\ |, oct( q|0b| . shift )'" alias b2d="perl -e 'printf qq|%d\ |, oct( q|0b| . shift )'" alias b2o="perl -e 'printf qq|%o\ |, oct( q|0b| . shift )'" |
perlfaq4中列出了几种将十进制转换为二进制的方法
(如何在数字表示形式/基数/基数之间转换?)。
sprintf是一个不错的选择。
我使用此代码将十进制转换为二进制,希望对您有所帮助:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/usr/bin/perl use strict; print"Enter a number to convert:"; chomp(my $decimal = <STDIN>); print"\ Converting $decimal to binary...\ "; my @array; my $num; while($decimal >= 1) { if($decimal == 1) { $num .= 1; last; } my $remainder = $decimal%2; $num .= $remainder; $decimal = $decimal/2; } print $num."\ "; |
1 2 3 4 5 6 | alias b2d="perl -e 'printf qq|%d\ |, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'" alias b2h="perl -e 'printf qq|%X\ |, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'" alias b2o="perl -e 'printf qq|%o\ |, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'" |
请尝试以下代码。它将起作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/perl use strict; print"Enter a decimal number \ "; 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,"\ "; |