Posted By: Dion Mendel
Date: 2007-03-17 23:07
Summary: BinData 0.5.0
Project: BinData
Do you ever find yourself writing code like this?
io = File.open(...)
len = io.read(2).unpack("v")
name = io.read(len)
width, height = io.read(8).unpack("VV")
puts "Rectangle #{name} is #{width} x #{height}"
It's ugly, violates DRY and feels like you're writing Perl, not Ruby.
BinData is a declarative way of reading and writing structured binary data. Here's how you'd write the above using BinData.
class Rectangle < BinData::Struct
. uint16le :len
. string :name, :initial_length => :len
. uint32le :width
. uint32le :height
end
io = File.open(...)
r = Rectangle.read(io)
puts "Rectangle #{r.name} is #{r.width} x #{r.height}"
BinData supports signed/unsigned integers, strings, null terminated strings, arrays, choices and user defined structures. This initial release has been heavily tested, and is being actively developed. |
|