Module Pack

module Pack: sig .. end
Fonctions d'emballage et de déballage d'entiers k-bits.

Notons n le nombre de bits utilisés pour représenter le type int sur votre machine. Autrement dit 31 ou 63 selon que l'architecture de votre machine soit 32 ou 64 bits, cette dernière information étant donnée par Sys.word_size.

Ce module est utilisé pour écrire le module ByteStream.


val pop_bits_as_int : int -> bool MyStream.t -> int * bool MyStream.t
Fixons k la valeur du premier argument, la fonction pop_bits_as_int k prend les k premiers bits (i.e. les plus à gauche) du flot binaire passé en argument pour en faire un entier x qu'elle renvoie ainsi que le flot binaire restant. Si le flot passé en argument contient strictement moins de k éléments, on complète à droite avec des zéros (« right padding »). Dans tous les cas on obtient donc k bits.

Un entier OCaml i est dit « k-bits » lorsque kn et que seuls ses k bits de droite peuvent être non nuls, autrement dit lorsque i = fst (pack_int k bs)bs est l'écriture binaire de i.
val push_int_as_bits : int -> int -> bool MyStream.t -> bool MyStream.t
Fixons k la valeur du premier argument, la fonction push_int_as_bits k prend les k bits de droite de l'écriture binaire de l'entier i passé en premier argument et les insère devant le (i.e. à gauche du) flot binaire passé en second argument.

Notons alors que si kn alors pour tout entier OCaml k-bits i, on a pack_int k (unpack_int k i bs) = (i, bs). C'est en particulier le cas lorsque l'on travaille avec des entier 8-bits (i.e. k=8).

Retour à la page du TD8