Crates.io | bit-cursor |
lib.rs | bit-cursor |
version | 0.1.0 |
source | src |
created_at | 2022-05-23 20:50:06.475809 |
updated_at | 2022-05-23 20:50:06.475809 |
description | Buffer cursor that supports bit-level operations |
homepage | http://github.com/bbaldino/bitcursor |
repository | http://github.com/bbaldino/bitcursor |
max_upload_size | |
id | 592148 |
size | 18,150 |
BitCursor is similar to std::io::Cursor, but allows reading various amounts of bits from a given buffer in addition to byte-sized chunks. It's built on top of the ux crate for types.
let data: Vec<u8> = vec![0b11110000, 0b00001111];
let mut cursor = BitCursor::new(data);
assert_eq!(cursor.bit_read::<u4>().unwrap(), 15);
assert_eq!(cursor.bit_read::<u4>().unwrap(), 0);
assert_eq!(cursor.bit_read::<u2>().unwrap(), 0);
assert_eq!(cursor.bit_read::<u6>().unwrap(), 15);
It also supports seeking via BitSeek
, which is similar to Seek
:
let data: Vec<u8> = vec![0b11110000, 0b00001111];
let mut cursor = BitCursor::new(data);
assert_eq!((1, 0), cursor.seek(BitSeekFrom::Start(1, 0)).unwrap());
assert_eq!(cursor.bit_read::<u4>().unwrap(), 0);
assert_eq!((0, 3), cursor.seek(BitSeekFrom::Current(0, -6)).unwrap());
assert_eq!(cursor.bit_read::<u4>().unwrap(), 0b1100);
assert_eq!((0, 3), cursor.seek(BitSeekFrom::End(0, -4)).unwrap());
assert_eq!(cursor.bit_read::<u4>().unwrap(), 0b1111);