Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
CStruct is a simulation of the C language's struct.Its main purpose is to manipulate binary-data conveniently in Ruby.
Ruby
branch: master
Failed to load latest commit information.
doc 1.0.0 commit
examples v1.0.1 commit
lib 1.0.1 pre-release
spec 1.0.1 pre-release
.gitignore 1.0.1 pre-release
MIT-LICENSE add MIT-LICENSE,modify some comments
README.md Update README.md
cstruct.gemspec cstruct.gemspec 1.0.1pre ->1.0.1

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.

Something went wrong with that request. Please try again.