You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

bitpacked

Package Overview
Dependencies
Maintainers
0
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bitpacked

A Bit-Packed Buffer

1.0.2
latest
Source
npmnpm
Version published
Weekly downloads
0
Maintainers
0
Weekly downloads
 
Created
Source

BitPackedBuffer

MIT License npm version

A high-performance JavaScript library for bit-level data manipulation with zero dependencies. Perfect for binary protocols, file formats, and low-level data operations.

Overview

BitPackedBuffer provides precise control over bit-level operations in JavaScript, supporting both big-endian and little-endian byte orders. Whether you're implementing a binary protocol, working with file formats, or handling low-level data, BitPackedBuffer is designed to meet your needs.

Key Features

  • 🚀 Zero dependencies, minimal overhead
  • 💫 Bit-level precision (1-32 bits)
  • 🔄 Big and little-endian support
  • 📦 Modern ES Module design
  • ⚡ Efficient memory usage
  • 🛡️ Comprehensive error checking

Installation

npm install bitpacked

Quick Examples

Basic Usage

import { BitPackedBuffer } from "bitpacked";

// Write mixed-width values
const buffer = new BitPackedBuffer()
  .write.bits(5, 3) // Write value 5 using 3 bits
  .write.bits(10, 4) // Write value 10 using 4 bits
  .write.string("Hi") // Write a string
  .alignToByte(); // Align to byte boundary

// Read them back
buffer.seek(0);
console.log(buffer.read.bits(3)); // → 5
console.log(buffer.read.bits(4)); // → 10
console.log(buffer.read.string(2)); // → "Hi"

Working with Endianness

// Create a little-endian buffer
const buffer = new BitPackedBuffer(null, "little");

// Write a 16-bit value
buffer.write.bits(1000, 16);

// Read it back
buffer.seek(0);
console.log(buffer.read.bits(16)); // → 1000

API Reference

Constructor

new BitPackedBuffer(
  contents?: Uint8Array | Buffer,
  endian?: 'big' | 'little'
)

Reading Operations

MethodDescriptionExample
read.bits(count)Read 1-32 bitsbuffer.read.bits(5)
read.bytes(count)Read multiple bytesbuffer.read.bytes(4)
read.string(length)Read fixed-length stringbuffer.read.string(10)
read.cString()Read null-terminated stringbuffer.read.cString()
read.int(bitCount)Read signed integerbuffer.read.int(16)
read.uint(bitCount)Read unsigned integerbuffer.read.uint(16)

Writing Operations

MethodDescriptionExample
write.bits(value, count)Write 1-32 bitsbuffer.write.bits(42, 7)
write.bytes(data)Write byte arraybuffer.write.bytes(bytes)
write.string(str)Write stringbuffer.write.string("hello")
write.cString(str)Write null-terminated stringbuffer.write.cString("hello")
write.int(value, bitCount)Write signed integerbuffer.write.int(-42, 16)
write.uint(value, bitCount)Write unsigned integerbuffer.write.uint(42, 16)

Buffer Management

MethodDescription
seek(position)Move to byte position
skip(bytes)Skip ahead bytes
mark(name?)Mark current position
reset(name?)Return to marked position
alignToByte()Align to byte boundary
clear()Reset buffer state
getBuffer()Get underlying buffer
isComplete()Check if all data read

Peeking Operations

Peeking operations don't advance the buffer position. They contain the same methods as read but return values without modifying the position.

MethodDescriptionExample
peek.bits(count)Peek 1-32 bitsbuffer.peek.bits(5)
peek.bytes(count)Peek multiple bytesbuffer.peek.bytes(4)
peek.string(length)Peek fixed-length stringbuffer.peek.string(10)
peek.cString()Peek null-terminated stringbuffer.peek.cString()
peek.int(bitCount)Peek signed integerbuffer.peek.int(16)
peek.uint(bitCount)Peek unsigned integerbuffer.peek.uint(16)

Common Use Cases

  • Binary file format parsing/writing
  • Network protocol implementation
  • Data compression/decompression
  • Game state serialization
  • Embedded systems communication

Error Handling

BitPackedBuffer includes comprehensive error checking:

try {
  buffer.read.bits(33); // Throws RangeError
} catch (error) {
  console.error("Invalid bit count:", error.message);
}

Performance Considerations

  • Align to byte boundaries when possible for better performance
  • Use mark()/reset() for temporary position changes
  • Pre-allocate buffers when size is known
  • Use the appropriate endianness for your data format

Contributing

Contributions are welcome! Here's how you can help:

  • Fork the repository
  • Create a feature branch: git checkout -b feature/amazing-feature
  • Make your changes and commit: git commit -m 'Add amazing feature'
  • Push to the branch: git push origin feature/amazing-feature
  • Open a Pull Request

Please ensure your PR:

  • Includes tests for new functionality
  • Updates documentation as needed
  • Follows the existing code style
  • Includes a clear description of changes

Support

License

This project is licensed under the MIT License - see the LICENSE file for details.

Made with ❤️ by RedYetiDev

Keywords

bit

FAQs

Package last updated on 07 Dec 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts