This crate provides utilities for bit-level operations on data. It is designed to offer flexible and efficient ways to manipulate bits in various storage formats. The primary focus of this crate is to allow detailed control over bit-level data and to cater to scenarios where such control is crucial.
- Bit Order Handling: Support for different bit ordering (e.g., MSB-first, LSB-first), allowing users to specify how bits are read from and written to the underlying storage.
- Byte Order Handling: Support for different byte endianness (e.g., little endian, big endian), enabling interpretation of byte sequences according to the specified byte order.
BitSliceStructure: The primary feature of this crate,BitSliceprovides a view into a sequence of bits, supporting operations like reading a bit at a specific index, slicing a range of bits, and setting the value of a bit.BitSliceis flexible in terms of the underlying storage and can be parameterized with different bit and byte orders.- [
BitIter] Iterator: An iterator over the bits in aBitSlice, offering both read and write capabilities for individual bits. - Macros for Convenience: Macros like [
bits!] to facilitate easy and concise creation ofBitSliceinstances from literal sequences of bits.
Enabling the alloc feature adds:
- Conversion of
BitSliceto a bit string (e.g., "1010110"). - Implementation of the
Debugtrait forBitSlice.
use bitslicer::{BitSlice, LittleEndian, Lsb0, bits};
let mut data = [0b01010101u8, 0b11110010];
let mut bit_slice: BitSlice<_, Lsb0, LittleEndian> = data.as_mut().into();
// Iterate over bits
for bit in bit_slice.iter() {
println!("{}", bit);
}
// Use bit_slice to access and manipulate bits...
assert_eq!(bit_slice.get_bit(2), true);
bit_slice.set_bit(2, false);
assert_eq!(bit_slice.get_bit(2), false);
let sub_slice = bit_slice.slice(1..10);
assert!(sub_slice == bits![0, 0, 0, 1, 0, 1, 0, 0, 1]);Add bitslicer to your Cargo.toml:
[dependencies]
bitslicer = {version: "0.1.0", git = "https://github.com/Sympatron/bitslicer.git"}Contributions to bitslicer are welcome! Please feel free to submit issues and pull requests to the repository.
This crate is licensed under BSD-3-Clause.