読者です 読者をやめる 読者になる 読者になる

Let's write β

趣味で書いたこととか、RustとLispが好き

CLで指定バイトでバイナリデータ出力

Lisp

ちょっとバイナリストリームとたわむれる必要がありまして、
数値を指定したbyteで入出力する必要がありました

(defun read-bytes (in number-of-bytes &key (big-endian nil))
  (if big-endian
    (loop for idx downfrom (1- number-of-bytes) downto 0
          sum (* (read-byte in)
                 (expt 2 (* 8 idx))))
    (loop for idx from 0 to (1- number-of-bytes)
          sum (* (read-byte in)
                 (expt 2 (* 8 idx))))))

(defun write-bytes (out val number-of-bytes &key (big-endian nil))
  (if big-endian
    (loop for idx downfrom (1- number-of-bytes) downto 0
          do
          (write-byte (ldb (byte 8 (* idx 8)) val) out))
    (loop for idx from 0 to (1- number-of-bytes)
          do
          (write-byte (ldb (byte 8 (* idx 8)) val) out))))

とりあえずbit-endianとlittle-endianには対応してあるつもりです。

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.