Encodage BER et Perl
Par Olivier Mengué le vendredi 22 décembre 2006, 01:43 - Code - Lien permanent
Une réponse à une question sur la liste de diffusion des Mongueurs de Perl m'a amené à explorer l'encodage 'w
' (BER : Binary Encoded Representation) de la fonction pack()
de Perl 5 (voir perlpacktut dans la doc).
La chaîne de caractères obtenue est de longueur variable car découpée par paquets de 7 bits. Voici quelques lignes de Perl pour trouver les bornes des changements de longueur :
my @a = map { ((2**(7*$_))-1, 2**(7*$_)) } 0 .. 5; print map { "$_: ".unpack('H*', pack('w', $_))."\n" } @a;
On obtient ceci (à gauche, le nombre en décimal et à droite encodé en BER puis en hexa) :
0: 00 1: 01 127: 7f 128: 8100 16383: ff7f 16384: 818000 2097151: ffff7f 2097152: 81808000 268435455: ffffff7f 268435456: 8180808000 34359738367: ffffffff7f 34359738368: 818080808000