1.0.2 • Published 1 year ago

bigint-pack v1.0.2

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
1 year ago

bigint-pack

Simple BigInt to binary packer/unpacker.

How it works

BigInt is arbitrary integer type, and cannot be represented as a fixed-width integer. For example BigInt 1 can be represented in memory as an object as follows:

{
    "sign": 0,
    "bytes": [1]
}

Where sign is the integer sign and bytes is the number representation.

This packer uses 1 bit for integer sign + 7 bits for byte length, allowing up to 127 bytes to represent number.

Byte order is always little-endian.

For example, we have BigInt -5: Negative number that fits in 1 byte, will be represented as follows:

SignLengthBytes
115

And in binary form it will look like this:

10000001 00000101
^^       ^
||       |_byte_0_
||
||_7_bit_length_
|
|_1_bit_sign

API Reference

BigIntByteLength(bint) → {number}

Calculate length of packed BigInt.

Parameters:

NameTypeDescription
bintBigIntBigInt to calculate length of.

Throws:

BigIntTooBigError - BigInt too big to pack.

Returns:

Number of bytes contained within packed BigInt.

BigIntPack(bint, target, offset) → {number}

Pack BigInt to bytes.

Parameters:

NameTypeDefaultDescription
bintBigIntBigInt to pack.
targetBufferLikeA target to pack into.
offsetNumber0The offset within target at which to begin packing.

Throws:

BigIntTooBigError - BigInt too big to pack.

BoundsError - Target not satisfy offset <= target.length - packed_length.

Returns:

Length of packed BigInt.

BigIntPackAlloc(bint) → {Buffer}

Pack BigInt to allocated Buffer.

NameTypeDescription
bintBigIntBigInt to pack.

Throws:

BigIntTooBigError - BigInt too big to pack.

Returns:

Packed BigInt.

BigIntUnpack(source, offset) → {BigInt}

Unpack BigInt from bytes.

Parameters:

NameTypeDefaultDescription
sourceBufferLikeSource from which to unpack.
offsetNumber0The offset within source at which to begin unpacking.

Throws:

BoundsError - Source not satisfy offset <= source.length - packed_length.

Returns:

Unpacked BigInt.

BigIntTooBigError

Error that occurs when BigInt value is too high.

BoundsError

Error that occurs when accessing invalid offset.

Members:

offset : number - Accessed offset.

BufferLike

Alias for Buffer or Uint8Array or Uint8ClampedArray.

(constant) MAX_PACKED_LENGTH : number

Max length of packed BigInt.

Author

Aikawa Yataro

1.0.2

1 year ago

1.0.1

3 years ago

1.0.0

3 years ago