(weinholt struct pack)
library. The string format, procedure/macro names and idea for optimisation during macro expansion are taken from it. And I have added indefinite length argument format. But don't look at the code ;-)The basic use is like this;
(import (binary pack)) ;; pack makes bytetevector ;; Fixed length (pack "4C" 1 2 3 4) ;; => #vu8(1 2 3 4) ;; (pack "4C" 1 2) ;; => &syntax ;; Indefinite length (pack "*C" 1 2 3 4) ;; => #vu8(1 2 3 4) (pack "*C" 1 2) ;; => #vu8(1 2) ;; It can only be allowed for the format position. ;; (pack "*C*S" 1 2) ;; => &syntax ;; pack! sets destructively (let ((bv (make-bytevector 8))) (pack! "*C" bv 0 #xFF #xFF #xFF) ;; => #vu8(255 255 255 0 0 0 0 0) ;; the third argument is the offset (pack! "*S" bv 4 1 2) ;; => #vu8(255 255 255 0 1 0 2 0) ;; #\x is padding, #\! put next data as big endian (pack! "6x!S" bv 0 3) ;; => #vu8(0 0 0 0 0 0 0 3) )Both
pack
and pack!
are macro however it can be passed to apply
. (Thanks to R6RS).I still need to make
unpack
though...
No comments:
Post a Comment