cl-pack supplies Perl/PHP/Ruby/Python compatible
unpack() functions to allow easy use of (binary format) protocols and files with the above mentioned languages and C. cl-pack was released by Dan Ballard under the BSD-3-Clause license.
The purpose of cl-pack is to take native Lisp data like numbers, floats, and strings and encode it in a safe binary format in string that can then be written to a file or exchanged with another program while unpack can extract data from binary formats and protocols.
cl-pack has nearly full support for all features offered by Perl's pack. It boasts full support for most data types and formating rules from numbers and string to formating rules and grouping and templates. cl-pack also supports endian safe floats as outlined by ruby. cl-pack is supports ASDF so as to make it easy to integrate into your existing system.
cl-pack is available in QuickLisp
CL-USER> (ql:quickload "cl-pack")
CL-PACK> (pack "VgA*c*" #x41424344 161.99 " a string " 69 70 71) ;; => "DCBAC!?q a string EFG" CL-PACK> (unpack "B8H2Ng" "ABCDEFC!?q") ;; => "01000001" ;; => "42" ;; => 1128547654 ;; => 161.99
Documentation is currently a bit sparse, but is contained in cl-pack.lisp. Additionally, a good overview of pack and unpack functions can be seen at http://perldoc.perl.org/functions/pack.html.
Nearly every feature except a few esoteric ones are supported, check the documentation inside cl-pack.lisp if in doubt and if a feature you need isn't currently supported feel free to contact me and I'll see if I can add it.
Note I think the this release is about as feature complete as I feel I need to get at the moment so I'm pushing it out.
Cavets cl-pack was developed on an x86 running Ubuntu with SBCL. It should be endian safe where required and conform to host CPU endianness where required but I haven't been able to test on anything but x86. I would hope that it would work with most Lisps out there. Please feel free to get a hold of me if you have issues that need fixing.
- Dan Ballard <firstname.lastname@example.org>