我们如何在 Rust 中操作 u8 数组的第一位?

How do we manipulate the first bit of a u8 array in Rust?

我正在尝试制作一个异步 WebSocket 服务器(我自己的实现)。我有以下代码:

use tokio::net::TcpListener;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut listener = TcpListener::bind("127.0.0.1:8080").await?;

    loop {
        let (socket, _) = listener.accept().await?;

        tokio::spawn(async move {
            let mut buffer = [0u8; 512];
            let stuff = match socket.read(&mut buffer).await {
                Ok(n) => buffer[..n].to_vec(),
                Err(_) => return,
            };
        });
    }
}

现在我该怎么办?根据规范,我必须检查 FIN 位、操作码等,但我该怎么做。 FIN 位只有 1 位,我们应该如何从 u8 数组中取出它?例子会很有帮助。

要从字节缓冲区中读取第一位,您可以使用如下方法:

fn fin_bit(buffer: &[u8]) -> Option<bool> {
    buffer.get(0)
        .map(|first_byte| first_byte & 0b10000000 > 0)
}