Comment puis-je convertir la chaîne binaire $x_bin="0001001100101"
en sa valeur numérique $x_num=613
en Perl?
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
Ma manière préférée est:
$x_num = oct("0b" . $x_bin);
Citant de man perlfunc
:
oct EXPR oct Interprète EXPR comme une chaîne octale et renvoie la valeur correspondante. (Si EXPR arrive à démarrer Avec "0x", l'interprète comme une chaîne hexagonale. Si EXPR commence avec "0b", il est interprété comme une chaîne binaire Les espaces de début sont ignorés dans Dans les trois cas.)
Comme d'habitude, il existe également 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 n'importe quelle longueur et vous pouvez faire d'autres choses intéressantes comme le transfert de bits, etc.
En fait, vous pouvez simplement coller "0b" sur le devant et c'est traité comme un nombre binaire.
Perl -le 'print 0b101'
5
Mais cela ne fonctionne que pour un mot simple.
Vous pouvez utiliser la méthode eval()
pour contourner la restriction Word-bare:
eval "\$num=0b$str;";