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