From a7909b294966eb861ce174aaa2c4696cb7cfa865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Fri, 7 Nov 2025 06:11:09 -0300 Subject: Bit stream decoder --- common.lisp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'common.lisp') diff --git a/common.lisp b/common.lisp index a061ca1..1c11703 100644 --- a/common.lisp +++ b/common.lisp @@ -7,3 +7,15 @@ (defstruct point (offset 0 :type fixnum) (size 0 :type fixnum)) + +(declaim (ftype (function ((array (unsigned-byte 1)) fixnum) (unsigned-byte 8)) bits->byte)) +(defun bits->byte (data index) + (let ((byte 0)) + (dotimes (i 8) + (setf byte (logior byte (ash (elt data (+ index i)) (- 7 i))))) + byte)) + +(declaim (ftype (function ((unsigned-byte 8) (array (unsigned-byte 1)) fixnum)) byte->bits)) +(defun byte->bits (data bits index) + (dotimes (i 8) + (setf (elt bits (+ index i)) (ash (logand data (ash 1 (- 7 i))) (- i 7))))) -- cgit v1.2.3