我们如何在 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)
}
我正在尝试制作一个异步 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)
}