[gull] Transtypage en Perl

Frédéric Schütz schutz at mathgen.ch
Wed Jun 24 09:02:50 CEST 2009


Faehndrich Philippe wrote:

> Y a-t-il en Perl un moyen direct d'interpréter une chaîne de zéros et de uns 
> (par exemple "1000101101110") comme valeur numérique, représentable avec 
> printf en décimal ou en hexa? ou faut-il écrire une routine pour cela?
> 
> J'ai graillé un peu avec printf et pack, mais je ne parviens pas au résultat 
> souhaité.

Tu peux la convertir en décimal avec unpack, et il sans doute plus 
simple d'utiliser une sous-routine pour ça (routine copiée du Perl 
Cookbook, à première vue pour un binaire sur 32 bits, mais adaptable). 
printf peut ensuite convertir en hexadécimal si nécessaire.


#!/usr/bin/perl

use feature ':5.10';

sub bin2dec {
     return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}

say bin2dec(1000101101110);


(avec en bonus une utilisation de la fonction "say" de Perl6, backportée 
dans Perl 5.10 -- rien de spécial, c'est équivalent à "print" avec un 
retour à la ligne automatique)

Frédéric


More information about the gull mailing list