Comment convertir une chaîne binaire en nombre en Perl?
Comment puis-je convertir la chaîne binaire $x_bin="0001001100101"
pour sa valeur numérique $x_num=613
en Perl?
29
demandé sur
Nathan Fellman
2009-01-27 17:43:29
5 réponses
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
23
répondu
Ed Guiness
2012-07-08 12:44:00
Mon manière préférée est:
$x_num = oct("0b" . $x_bin);
citation de man perlfunc
:
oct EXPR oct Interprets EXPR as an octal string and returns the corresponding value. (If EXPR happens to start off with "0x", interprets it as a hex string. If EXPR starts off with "0b", it is interpreted as a binary string. Leading whitespace is ignored in all three cases.)
57
répondu
Nathan Fellman
2017-06-22 00:43:33
comme d'habitude, il y a aussi un excellent module CPAN qui devrait être mentionné ici: Bit:: Vector.
La transformation ressemblerait à quelque chose comme ceci:
use Bit::Vector;
my $v = Bit::Vector->new_Bin( 32, '0001001100101' );
print "hex: ", $v->to_Hex(), "\n";
print "dec: ", $v->to_Dec(), "\n";
les chaînes binaires peuvent être de presque n'importe quelle longueur et vous pouvez faire d'autres choses soignées comme le bit-shifting, etc.
12
répondu
innaM
2009-01-27 16:39:29
en fait, vous pouvez simplement coller "0b" sur le devant et il est traité comme un nombre binaire.
perl -le 'print 0b101'
5
mais cela ne fonctionne que pour une simple parole.
6
répondu
noswonky
2009-07-30 14:13:29
Vous pouvez utiliser le eval()
méthode pour contourner la restriction des mots nus:
eval "$num=0b$str;";
0
répondu
hubertf
2018-01-30 22:44:13