Skip to content

svperbeast/struct

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •