= 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.
Project
bitpack
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
Development
Dependencies
Development
= 5.1.0
Project Readme