Skip to main content

Faster C implementation of bitstruct

Project description

License Build Status

About

cbitstruct is a C implementation of the bitstruct library. Credits to Erik Moqvist for the original bitstruct library available on Github and pip.

The goal is to provide the same API an idealy to be able to interchange import bitstruct and import cbitstruct as bitstruct.

Obvious increased performance comes with limitations described below.

Installation

pip3 install cbitstruct

Documentation

Please refer to the bitstruct documentation as the aim of this library is to provide the same API with increased performance.

If you are not used to bitstruct, you should seriously consider using it first, before migrating to this library if you require higher performance.

Limitations

Limitation Will it be lifted ?
All types except padding are limited to 64 bits Maybe for 'raw' and 'text' types
May not work on big-endian architectures Maybe
Exceptions differ from bitstruct Probably not
CPython only Probably not
Error messages are unclear Will never be as clear as bitstruct
Python >= 3.5 No

Some limitations are there because I did not get the time or motivation to lift them up. Some other are deeply rooted into this library and may never be lifted.

Performance

Comparing to bitstruct

The script available in tests/test_perf.py measures performance comparing to the bitstruct library.

Here are the result "on my machine" (Ubuntu in Virtualbox on a laptop):

byteswap list of int      | x  8.779 (   8.638us ->   0.984us)
byteswap str              | x 17.466 (   9.158us ->   0.524us)
calcsize                  | x139.330 (  61.060us ->   0.438us)
compiled pack             | x 47.389 (  35.968us ->   0.759us)
compiled pack_dict        | x 27.184 (  34.588us ->   1.272us)
compiled pack_into        | x 32.037 (  38.650us ->   1.206us)
compiled pack_into_dict   | x 27.343 (  37.718us ->   1.379us)
compiled unpack           | x 33.928 (  31.278us ->   0.922us)
compiled unpack_dict      | x 21.627 (  31.597us ->   1.461us)
compiled unpack_from      | x 30.622 (  29.977us ->   0.979us)
compiled unpack_from_dict | x 20.479 (  30.936us ->   1.511us)
pack                      | x 77.003 ( 103.030us ->   1.338us)
pack_dict                 | x 53.254 ( 103.255us ->   1.939us)
pack_into                 | x 82.829 ( 119.373us ->   1.441us)
pack_into_dict            | x 52.173 ( 108.135us ->   2.073us)
unpack                    | x 78.459 (  91.896us ->   1.171us)
unpack_dict               | x 40.287 (  89.300us ->   2.217us)
unpack_from               | x 77.027 (  91.202us ->   1.184us)
unpack_from_dict          | x 39.467 (  88.043us ->   2.231us)

Disclaimer: these results may and will vary largely depending on the number of elements and types you pack/unpack. This script is provided as-is, and I will gladly accept an improved script providing more reliable results.

The dict API

The dict API is marginally slower than the traditional one. As the packing/unpacking performance is quite high, the overhead of performing dictionary lookups and hashing significantly increas pack and unpacking duration.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cbitstruct-1.1.1.tar.gz (30.0 kB view details)

Uploaded Source

Built Distributions

cbitstruct-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (71.1 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (72.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (71.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (69.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (69.4 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (69.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (68.1 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

cbitstruct-1.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (68.1 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

File details

Details for the file cbitstruct-1.1.1.tar.gz.

File metadata

  • Download URL: cbitstruct-1.1.1.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for cbitstruct-1.1.1.tar.gz
Algorithm Hash digest
SHA256 29e3a4113ac138228b8697284f8906e705a8b24851574ac60e20850e4245fca1
MD5 8854cc45ae1ec0d575a17de802485824
BLAKE2b-256 f4afd7253b42a19bf01dc0dc3416ab23255e0e42af34d645d2908bb8a894afb5

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 684a03dd46390ca99cbb98dac190b55deed592570e634c34de540ae7db784984
MD5 a847b903528c1fea2690d50244a7a52a
BLAKE2b-256 236882af091a856aad7b8242d29d4b3249e6d00d50e6d96ab6f0be568a07e21c

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10d4dfb847f74b390ed526fae20ab8a03b6c118701b5ab6ddda3935a2183dd10
MD5 0267be48494caa4309b4593a7280828a
BLAKE2b-256 a6eaf748cb1f44478921de1e7ebf768aa356f0dfdad7baa358aea75837e0c405

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc379915ebea545b3bf6a6054a81fa476f4b0d29485116fba4e8c33f61a52d92
MD5 3aacabe6cb2988f44b1c7a61c8575a07
BLAKE2b-256 02bc221572ffe7bbcbb829d6e9120cf19b43473a53655b6eb9f51dbd7de8b1ac

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 09f67c0a15822b4081ef1381f0b25cd84cf23519b83ead9696f1fc2928eff11e
MD5 f3cc8e14ab3608bf0dd38f321abb2a65
BLAKE2b-256 a17c332d40c952e1673f192cf21d46e493384ccdc767572ff48919b400aad635

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e6590c032a1b65e8439628f3096aeee5b8e9bfa704e13509ab6e5c277404b425
MD5 a3773d38646c1d1f085675d934bb921f
BLAKE2b-256 e191e01ec1d7595ac801a728e5223bc6cffea252956aa30f002364fe4ad93dea

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e6c1d1530044e8a81a10415d0262050d1353cc24c181c416a1b7caa771aa82e6
MD5 a6881db1f88568da29822ff9196d610d
BLAKE2b-256 78053a91c92447a6d956aec9d88f137e3284be91b032aebf24828b34266a15a8

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9981be43e511acd334191ff004de319f34e527f1a11ebc4c2623c8db58b68b05
MD5 ab2a849f112ab1e04be1d9e74d613b33
BLAKE2b-256 f19dbfb9bed75a65ac7519151ca37ca2e673ca5c1f07612cbd6999f2c22a1559

See more details on using hashes here.

File details

Details for the file cbitstruct-1.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cbitstruct-1.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c63097a2838140b34928ee1c548a14a7ea538cc00b7909125585a063ee3cd53d
MD5 a367d3a5fe7ca503a87f5a26ba86d2bf
BLAKE2b-256 2ba7ecc4649650c2519b13c593ed2af939fd2800e7cc07b1af357ebb138d4a31

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page