Svperbeast Struct Save

pack and unpack binary data.

Project README

Introduction

struct is a binary data formatting library inspired by 'The Practice of Programming (Brian W. Kernighan, Rob Pike)' and Python struct module.

Format

struct uses following format characters (note that struct does not fully support the Python struct module's format):

Table 1. Byte order

Character Byte order
= native
< little-endian
> big-endian
! network (= big-endian)

Table 2. Format characters

Format C/C++ Type Standard size
b char 1
B unsigned char 1
h short 2
H unsigned short 2
i int 4
I unsigned int 4
l long 4
L unsigned long 4
q long long 8
Q unsigned long long 8
f float 4
d double 8
s char[]
p char[]
x pad bytes
v go/pbuf svarint
V go/pbuf varint

Pack

#include "struct.h"
...
char buf1[BUFSIZ] = {'\0',};
char buf2[BUFSIZ] = {'\0',};
char str[BUFSIZ] = {'\0',};
char fmt[BUFSIZ] = {'\0',};
int val = 42;

struct_pack(buf1, "i", val);

strcpy(str, "test");
snprintf(fmt, sizeof(fmt), "%ds", strlen(str));

struct_pack(buf2, fmt, str);

Unpack

...
int rval;
char rstr[32] = {'\0',};

struct_unpack(buf1, "i", &rval);

struct_unpack(buf2, fmt, rstr);

Install

CMake

Compile

mkdir build
cd build
cmake ..
make
make install

headers: build/release/include/struct/. library: build/release/lib/.

Test

cmake -DSTRUCT_BUILD_TEST=ON ..
make
make test

or run struct_test.

valgrind memory check:

ctest -T memcheck

Bazel

Compile

bazel build //:struct

Test

bazel test //test:struct_test

or

bazel test --test_output=all //test:struct_test

you can use git_repository to fetch struct library.

WORKSPACE:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "struct",
    branch = "master",
    remote = "https://github.com/svperbeast/struct",
)

BUILD:

cc_binary(
    name = ...,
    srcs = [...],
    deps = [
        "@struct//:struct",
    ],
)

References

The Practice of Programming (9.1 Formatting Data)

Python struct

License

Code released under the MIT license.

Open Source Agenda is not affiliated with "Svperbeast Struct" Project. README Source: svperbeast/struct
Stars
65
Open Issues
0
Last Commit
1 year ago
Repository
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating