Skip to content

codecs compatible encode and decoder for BigInt numbers.

License

Notifications You must be signed in to change notification settings

consento-org/bigint-codec

Repository files navigation

@consento/bigint-codec

@consento/bigint-codec is a codecs compatible encode and decoder for BigInt numbers.

Turns bigint numbers to Bytes and Bytes to bigint numbers.

Usage

const {
  bigUintLE,
  bigUintBE,
  bigIntLE,
  bigIntBE,
  bigIntQuick
} = require('@consento/bigint-codec')

bigUintLE.decode(
  bigUintLE.encode(256n)
)

// If you would like to know how many bytes are encoded, perhaps the iterator might be more useful.
for (const byte of bigUintLE.encodeBytes(256n)) {
  // If you need only to access the bytes and don't want to allocate a full ByteArray
}
const n256 = bigUintLE.decodeBytes([0, 2])

Choosing byte formats

The byte formats are generally compatible with the rust library num-bigint.

  • biguint-le - only for n >= 0; from lowest to highest bytes; fastest! It allows quick access and quick storage.
  • biguint-be - only for n >= 0; from highest to lowest bytes; encoding slower than le, since we need to know first how many bytes are necessary.
  • bigint-le - from lowest to highest bytes; will store the sign in the first byte; negative numbers will be stored inversely (255-0 instead of 0-255)
  • bigint-be - from highest to lowest bytes; will store the sign in the last byte; slowest variant as it is very complex to map to javascript

Additionally we support a custom codec called bigint-quick. It is not compatible to other implementations but it is the fastest signed bigint implementation we could find!

It will store the signature in the lowest bit of the first number and the absolute value from lowest to highest bytes - only slightly slower than big-uint-le. If its okay to not be compatible to other libraries, this should be your first choice, else big-int-le is a fine choice.

Smaller bundle size

Feel free to use the require('@consento/bigint-codec/biguint-le') access notation for smaller bundle sizes.

License

MIT

About

codecs compatible encode and decoder for BigInt numbers.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published