| Node-CType is a way to read and write binary data in structured and easy to use |
| format. Its name comes from the C header file. |
|
|
| To get started, simply clone the repository or use npm to install it. Once it is |
| there, simply require it. |
|
|
| git clone git: |
| npm install ctype |
| var mod_ctype = require('ctype') |
|
|
|
|
| There are two APIs that you can use, depending on what abstraction you'd like. |
| The low level API let's you read and write individual integers and floats from |
| buffers. The higher level API let's you read and write structures of these. To |
| illustrate this, let's looks look at how we would read and write a binary |
| encoded x,y point. |
|
|
| In C we would define this structure as follows: |
|
|
| typedef struct point |
| |
| |
| point_t; |
|
|
| To read a binary encoded point from a Buffer, we first need to create a CType |
| parser (where we specify the endian and other options) and add the typedef. |
|
|
| var parser = new mod_ctype.Parser(); |
| parser.typedef('point_t', [ |
| }, |
| } |
| ]); |
|
|
| From here, given a buffer buf and an offset into it, we can read a point. |
|
|
| var out = parser.readData([ } ], buffer, 0); |
| console.log(out); |
| } |
|
|
| Another way to get the same information would be to use the low level methods. |
| Note that these require you to manually deal with the offset. Here's how we'd |
| get the same values of x and y from the buffer. |
|
|
| var x = mod_ctype.ruint16(buf, 'big', 0); |
| var y = mod_ctype.ruint16(buf, 'big', 2); |
| console.log(x + ', ' + y); |
| 23, 42 |
|
|
| The true power of this API comes from the ability to define and nest typedefs, |
| just as you would in C. By default, the following types are defined by default. |
| Note that they return a Number, unless indicated otherwise. |
|
|
| * int8_t |
| * int16_t |
| * int32_t |
| * int64_t (returns an array where val[0] << 32 + val[1] would be the value) |
| * uint8_t |
| * uint16_t |
| * uint32_t |
| * uint64_t (returns an array where val[0] << 32 + val[1] would be the value) |
| * float |
| * double |
| * char (either returns a buffer with that character or a uint8_t) |
| * char[] (returns an object with the buffer and the number of characters read which is either the total amount requested or until the first 0) |
|
|
|
|
| ctf2json integration: |
|
|
| Node-CType supports consuming the output of ctf2json. Once you read in a JSON file, |
| all you have to do to add all the definitions it contains is: |
|
|
| var data, parser; |
| data = JSON.parse(parsedJSONData); |
| parser = mod_ctype.parseCTF(data, ); |
|
|
| For more documentation, see the file README.old. Full documentation is in the |
| process of being rewritten as a series of manual pages which will be available |
| in the repository and online for viewing. |
|
|
| To read the ctio manual page simple run, from the root of the workspace: |
|
|
| man -Mman -s 3ctype ctio |
|
|