bigint-pack
v1.0.2
Published
Simple BigInt to binary packer/unpacker.
Downloads
4
Readme
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:
|Sign|Length|Bytes| |----|------|-----| | 1 | 1 | [5] |
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:
| Name | Type | Description | |------|--------|--------------------------------| | bint | BigInt | BigInt 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:
| Name | Type | Default | Description | |--------|---------------------------|---------|-----------------------------------------------------| | bint | BigInt | | BigInt to pack. | | target | BufferLike | | A target to pack into. | | offset | Number | 0 | The 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.
| Name | Type | Description | |------|--------|-----------------| | bint | BigInt | BigInt to pack. |
Throws:
BigIntTooBigError
- BigInt too big to pack.
Returns:
Packed BigInt.
BigIntUnpack(source, offset) → {BigInt}
Unpack BigInt from bytes.
Parameters:
| Name | Type | Default | Description | |--------|---------------------------|---------|-------------------------------------------------------| | source | BufferLike | | Source from which to unpack. | | offset | Number | 0 | The 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.