bigint-pack v1.0.2
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_signAPI 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.