J'ai une fonction Clojure qui prend une suite de nombres la coupe dans le nombre de bits approprié et retourne une séquence paresseuse des morceaux (les bits les plus bas d'abord). Il tamponne les bits de poids fort du dernier bloc pour remplir la taille du bloc et j'ai besoin de conseils sur la "meilleure façon (tm)" d'enregistrer la quantité de rembourrage tout en le gardant paresseux et fonctionnel?bourrage des séquences paresseuses du bloc binaire
Des mots de sagesse très appréciés.
(defn block-seq ([block-size bytes] "reads a byte-seq into a sequence of block-size bits." (block-seq 8 block-size bytes)) ([in-block-size out-block-size bytes] "converts a seq from in-block-size to out-block-size" ...
Paramètres:
- en bloc de taille est le nombre de bits significatifs dans chaque numéro dans la séquence d'entrée
- out-bloc de taille est le nombre de bits significatifs dans chacun des les nombres dans le seq paresseux qui est retourné.
- octets est une séquence paresseux de nombres à partir de laquelle extraire les bits
Voici un exemple qui prend une séquence de trois octets et il se décompose en une séquence de deux vingt nombres de bits (et alors elle imprime comme une chaîne binaire).
user> (map #(java.lang.Integer/toBinaryString %) (block-seq 20 [0xAA 0xAA 0xAA])) ("10101010101010101010" "1010") user>
Le deuxième nombre dans la séquence de 20 nombres de bits ne comporte que quatre bits de poids faible et a une 16 zéros ajoutés efficaces. Si j'ai ensuite passé cette séquence à une autre fonction qui voulait faire quelque chose avec la séquence et l'envoyer sur un réseau; le code sur l'extrémité de réception doit savoir ne pas imprimer/stocker/etc les 16 derniers bits.
PS: ceux-ci peuvent être enchaînés. (block-seq 20 15 (block-seq 8 20 (read-bytes-from-file)))
Il est difficile de dire ce que vous faites sans voir plus de code, mais pourriez-vous utiliser des métadonnées pour enregistrer le rembourrage? –
Qu'est-ce qui doit lire les informations sur le nombre de bits de remplissage et comment le lire? –
merci pour les commentaires. éditera. –