pub struct BitBuffer<E>where
E: Endianness,{ /* private fields */ }Expand description
Buffer that allows reading integers of arbitrary bit length and non byte-aligned integers
§Examples
use bitstream_reader::{BitBuffer, LittleEndian, Result};
let bytes = vec![
0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
];
let buffer = BitBuffer::new(bytes, LittleEndian);
// read 7 bits as u8, starting from bit 3
let result: u8 = buffer.read_int(3, 7)?;Implementations§
Source§impl<E> BitBuffer<E>where
E: Endianness,
impl<E> BitBuffer<E>where
E: Endianness,
Sourcepub fn new(bytes: Vec<u8>, _endianness: E) -> Self
pub fn new(bytes: Vec<u8>, _endianness: E) -> Self
Create a new BitBuffer from a byte vector
§Examples
use bitstream_reader::{BitBuffer, LittleEndian};
let bytes = vec![
0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
];
let buffer = BitBuffer::new(bytes, LittleEndian);Source§impl<E> BitBuffer<E>where
E: Endianness,
impl<E> BitBuffer<E>where
E: Endianness,
Sourcepub fn read_bool(&self, position: usize) -> Result<bool>
pub fn read_bool(&self, position: usize) -> Result<bool>
Read a single bit from the buffer as boolean
§Errors
ReadError::NotEnoughData: not enough bits available in the buffer
§Examples
let result = buffer.read_bool(5)?;
assert_eq!(result, true);Sourcepub fn read_int<T>(&self, position: usize, count: usize) -> Result<T>
pub fn read_int<T>(&self, position: usize, count: usize) -> Result<T>
Read a sequence of bits from the buffer as integer
§Errors
ReadError::NotEnoughData: not enough bits available in the bufferReadError::TooManyBits: to many bits requested for the chosen integer type
§Examples
let result = buffer.read_int::<u16>(10, 9)?;
assert_eq!(result, 0b100_0110_10);Sourcepub fn read_bytes(&self, position: usize, byte_count: usize) -> Result<Vec<u8>>
pub fn read_bytes(&self, position: usize, byte_count: usize) -> Result<Vec<u8>>
Read a series of bytes from the buffer
§Errors
ReadError::NotEnoughData: not enough bits available in the buffer
§Examples
assert_eq!(buffer.read_bytes(5, 3)?, &[0b0_1010_101, 0b0_1100_011, 0b1_1001_101]);
assert_eq!(buffer.read_bytes(0, 8)?, &[
0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
]);Sourcepub fn read_string(
&self,
position: usize,
byte_len: Option<usize>,
) -> Result<String>
pub fn read_string( &self, position: usize, byte_len: Option<usize>, ) -> Result<String>
Read a series of bytes from the buffer as string
You can either read a fixed number of bytes, or a dynamic length null-terminated string
§Errors
ReadError::NotEnoughData: not enough bits available in the bufferReadError::Utf8Error: the read bytes are not valid utf8
§Examples
// Fixed length string
assert_eq!(buffer.read_string(0, Some(13))?, "Hello world".to_owned());
// fixed length with null padding
assert_eq!(buffer.read_string(0, Some(16))?, "Hello world".to_owned());
// null terminated
assert_eq!(buffer.read_string(0, None)?, "Hello world".to_owned());Sourcepub fn read_float<T>(&self, position: usize) -> Result<T>where
T: Float + UncheckedPrimitiveFloat,
pub fn read_float<T>(&self, position: usize) -> Result<T>where
T: Float + UncheckedPrimitiveFloat,
Read a sequence of bits from the buffer as float
§Errors
ReadError::NotEnoughData: not enough bits available in the buffer
§Examples
let result = buffer.read_float::<f32>(10)?;Trait Implementations§
Source§impl<E: Endianness> Clone for BitBuffer<E>
impl<E: Endianness> Clone for BitBuffer<E>
Source§impl<E: Endianness> Debug for BitBuffer<E>
impl<E: Endianness> Debug for BitBuffer<E>
Auto Trait Implementations§
impl<E> Freeze for BitBuffer<E>
impl<E> RefUnwindSafe for BitBuffer<E>where
E: RefUnwindSafe,
impl<E> !Send for BitBuffer<E>
impl<E> !Sync for BitBuffer<E>
impl<E> Unpin for BitBuffer<E>where
E: Unpin,
impl<E> UnsafeUnpin for BitBuffer<E>
impl<E> UnwindSafe for BitBuffer<E>where
E: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more