Project

bitpack

0.0
No commit activity in last 3 years
No release in over 3 years
Library for packing and unpacking binary strings.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

= 5.1.0
 Project Readme
= BitPack: Library for packing and unpacking binary strings

BitPack is a library that provides an easy to use API for packing and
unpacking arbitrary binary strings.  Unlike Array#pack and String#unpack,
BitPack objects allow you to pack and unpack fields of arbitrary bit lengths.

= Installing BitPack

Get BitPack from RubyForge.

  $ gem install bitpack

= Example

In this example, we will see how to pack and unpack a contrived message format.

The format is as follows:

* field +foo+: unsigned integer, 3 bits in length
* field +bar+: unsigned integer, 13 bits in length
* field +baz+: octet string, +bar+ bytes in length


   require 'rubygems'
   require 'bitpack'
   
   class Message
     attr_accessor :foo, :bar, :baz
     def initialize(foo=nil, bar=nil, baz=nil)
       @foo = foo
       @bar = bar
       @baz = baz
     end
   
     def pack
       # create a new BitPack object to pack the message into
       bp = BitPack.new
   
       # pack field foo into 3 bits
       bp.append_bits(@foo, 3)
   
       # pack field bar into 13 bits
       bp.append_bits(@bar, 13)
   
       # finally, pack baz as a string
       bp.append_bytes(@baz)
   
       # convert the BitPack to a string
       bp.to_bytes
     end
   
     def self.unpack(bytes)
       m = self.new
   
       # create a new BitPack from the packed message string
       bp = BitPack.from_bytes(bytes)
   
       # unpack field foo from the first 3 bits
       m.foo = bp.read_bits(3)
   
       # unpack field bar from the next 13 bits
       m.bar = bp.read_bits(13)
   
       # finally, unpack the string baz from the next bar bytes 
       m.baz = bp.read_bytes(m.bar)
   
       m
     end
   end
   
   m1 = Message.new
   m1.foo = 5
   s = "BitPack makes packing and unpacking binary strings easy!"
   m1.bar = s.length
   m1.baz = s
   
   bytes = m1.pack
   
   p bytes
     #=> "\2408BitPack makes packing and unpacking binary strings easy!"
   
   m2 = Message.unpack(bytes)
   p m2.foo
     #=> 5
   p m2.bar
     #=> 56
   p m2.baz
     #=> "BitPack makes packing and unpacking binary strings easy!"


= Notes

BitPack is almost entirely implemented as a C library.  If you would like to
use BitPack from a C program, just grab the bitpack.c and bitpack.h files from
the ext/ directory of the gem and include them in your project.  Documentation
can be found in bitpack.h.