Frage

I haben Clojure Funktion, die eine Folge von Zahlen Koteletts es in die entsprechende Anzahl von Bits und gibt einen faulen Reihenfolge der Stücke (Bits niedrigster Ordnung zuerst) erfolgt. Es füllt die höherwertigen Bits des letzten Blocks der Blockgröße zu füllen und ich brauche Beratung über die „beste Art und Weise (tm)“ die Menge der Polsterung aufzunehmen, während sie faul und funktional zu halten?

Worte der Weisheit sehr geschätzt.

(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"
  ...

Parameter:

  • in-Block-Größe ist die Anzahl von Bits in jeder Nummer in der Eingangssequenz
  • out-Block-Größe ist die Anzahl der Bits in jedem der Zahlen in den faulen f, der zurückgegeben wird.
  • Bytes ist eine faule Folge von Zahlen, aus denen zu extrahieren Bits

Hier ist ein Beispiel, das eine Sequenz von drei Bytes nimmt und bricht es in eine Folge von zwei zwanzig Bit-Zahlen (und dann druckt ihn als eine binäre Zeichenfolge).

user> (map #(java.lang.Integer/toBinaryString %) (block-seq 20 [0xAA 0xAA 0xAA]))
("10101010101010101010" "1010")
user> 

Die zweite Zahl in der Sequenz von 20-Bit-Zahlen hat nur vier Bits und hat eine effektive 16 Nullen hinzugefügt. Wenn ich übergeben dann diese Sequenz auf eine andere Funktion, die etwas mit der Sequenz tun wollte und es über ein Netzwerk zu senden; der Code auf der Empfangsseite muss wissen nicht / Speicher drucken / etc die letzten 16 Bits.

PS: diese können verkettet werden. (Block-seq 20 15 (Block-seq 8 20 (Lese-Byte-from-Datei)))

War es hilfreich?

Lösung

Es ist immer noch nicht ganz klar, was Sie tun wollen, aber es scheint, dass Sie den besten Weg für Block-Seq zurückzukehren, um die Anzahl der aufgefüllten Bits im letzten Brocken wissen wollen. Natürlich möglich, dass nicht nach vorne, wenn Sie richtig faul sein wollen, so würde die Zahl mit oder nach dem letzten Brocken wird zurückgegeben haben.

Ohne Metadaten könnten Sie einfach eine Liste zurück, wie

(1 2 3 :pad 12)

Metadaten verwenden, könnten Sie diese Auffüllinformationen zu den letzten Nachteilen hinzufügen (Clojure nicht Metadaten Ganzen Zahlen addiert), so dass der letzte Nachteil wäre gleichbedeutend mit

(with-meta '(3) {:pad 12})

Für Verkettungs binary-Block zu arbeiten, würde bewusst, dass Auffüllinformationen sein muß, in beiden Fällen, so in der Lage un-Pad zu sein und dann wieder Pad den letzten Brocken.

Wie die Polsterung Informationen über den Draht übertragen ist eine andere Frage, aber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top