从 u8 字节中提取 7 位有符号整数

cra*_*our -4 byte endianness rust

我正在使用人机接口设备协议从外部设备获取数据。我使用的库返回一个字节数组 ( [u8; 64]),我想从一个字节中提取一个字节i7(将i8在 Rust 中)。

我想要操作的字节中有两条不同的信息:

  • 1 位用于某物
  • 其他 7 位(我必须将其解码为有符号整数)用于另一件事。

你知道我可以做什么来实现这个目标吗?

cra*_*our 6

使用crate,bitreader我已经能够正确解码 7 位有符号整数。

let mut bit_reader = BitReader::new(buffer);
let first_useless_bit: u8 = bit_reader.read_u8(1).unwrap();
let extracted_value: i8 = bit_reader.read_i8(7).unwrap();
Run Code Online (Sandbox Code Playgroud)


She*_*ter 5

你的问题很不清楚,但我认为你只是在问正常的位操作。屏蔽 7 位(假设7 位,尽管你没有说)并将剩余位转换为有符号数:

fn main() {
    let byte = 0xFFu8;
    let byte2 = (byte & 0b0111_1111) as i8;
    println!("{}", byte2);
}
Run Code Online (Sandbox Code Playgroud)