Posted By: Dion Mendel
Date: 2012-06-21 05:15
Summary: BinData 1.4.4
Project: BinData
= BinData is a declarative way to read and write structured binary data.
This is another minor bugfix release. A couple of bugs were fixed. :pad_char was renamed to :pad_byte as Ruby 1.9 strings are multibyte. The manual has been updated and improved.
If you use BinData and have any comments, suggestions or questions, feel free to email me.
== What is 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.
Here's how you'd write the above using BinData.
class Rectangle < BinData::Record
. endian :little
. uint16 :len
. string :name, :read_length => :len
. uint32 :width
. uint32 :height
end
io = File.open(...)
r = Rectangle.read(io)
puts "Rectangle #{r.name} is #{r.width} x #{r.height}"
BinData supports all the data types you expect, including; arbitrarily sized/signed/endian integers, floats, bitstrings, strings, null terminated strings, dependent fields, arrays, choices, nested structures, and user defined structures. |
|