我们如何在Rust中读取u8数组的第一位?

问题描述 投票:1回答:1

我正在尝试制作一个异步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阵列中取出?例子会很有帮助。

arrays rust bit-manipulation byte bit
1个回答
0
投票

要从字节缓冲区中读取第一位,可以使用类似以下的内容:

fn fin_bit(buffer: &[u8]) -> Option<bool> {
    buffer.get(0)
        .map(|first_byte| first_byte & 0b10000000 > 0)
}
© www.soinside.com 2019 - 2024. All rights reserved.