CStruct is a simulation of the C language's struct.Its main purpose is to manipulate binary-data conveniently in Ruby.
Ruby
Switch branches/tags
Nothing to show
Latest commit 51998a5 Nov 5, 2012 @skandhas Update README.md
Permalink
Failed to load latest commit information.
doc 1.0.0 commit Dec 19, 2011
examples v1.0.1 commit Feb 12, 2012
lib 1.0.1 pre-release Feb 12, 2012
spec 1.0.1 pre-release Feb 12, 2012
.gitignore 1.0.1 pre-release Feb 12, 2012
MIT-LICENSE add MIT-LICENSE,modify some comments Feb 12, 2012
README.md Update README.md Nov 5, 2012
cstruct.gemspec cstruct.gemspec 1.0.1pre ->1.0.1 Feb 12, 2012

README.md

##Synopsis CStruct is a simulation of the C language's struct.Its main purpose is to manipulate binary-data conveniently in Ruby. It can be used in:

  • Binary file IO like C.
  • The parameter of the OS's API.(e.g. Win32)
  • Other...

Lean more: http://cstruct.rubyforge.org/

##Getting Started ###Install CStruct Install CStruct is easy.

gem install cstruct

###Using CStruct Let's see an example,struct Point in C language(32-bit platform) like this:

struct Point
{
  int x;
  int y;
};

How to represent struct Point in Ruby? You can use CStruct to do it.

class Point < CStruct
  int32:x
  int32:y
end

Example:

require 'cstruct'

# struct Point in Ruby:
class Point < CStruct
 int32:x
 int32:y
end

# create a Point's instance
point = Point.new

# assign like as C language
point.x = 10
point.y = 20
puts "point.x = #{point.x},point.y = #{point.y}"

###Using Win32Struct like this:

typedef struct _OSVERSIONINFOEXA {
   DWORD dwOSVersionInfoSize;
   DWORD dwMajorVersion;
   DWORD dwMinorVersion;
   DWORD dwBuildNumber;
   DWORD dwPlatformId;
   CHAR szCSDVersion[ 128 ];
   WORD wServicePackMajor;
   WORD wReserved[2];
} OSVERSIONINFOEXA;

in Ruby:

class OSVERSIONINFOEXA < Win32Struct
   DWORD :dwOSVersionInfoSize
   DWORD :dwMajorVersion
   DWORD :dwMinorVersion
   DWORD :dwBuildNumber
   DWORD :dwPlatformId
   CHAR :szCSDVersion,[ 128 ]
   WORD :wServicePackMajor
   WORD :wServicePackMinor
   WORD :wReserved,[2]
end

##Lean More Please see also Documents and Examples.