如何在 Rust 中将枚举变量转换为 u8?

Swa*_*ERA 4 rust

我想这样做。

#[repr(u8)]
pub enum MessageType {
    Authentification,
    // ...
}
fn main() {
  let message_type = MessageType::Authentification;
  let binary_representation: u8 = message_type.into();
}
Run Code Online (Sandbox Code Playgroud)

我认为自己有义务亲自实施。

有谁有一个解决方案可以使用表示来转换我的类型。

我认为在不安全的情况下这样做是可能的,但我宁愿不这样做。

对于文化来说,这仍然很有趣。

mic*_*yan 5

您必须手动定义每个变体的值,并使用as而不是.into()进行转换,因为Into<u8>不是由 实现的MessageType

#[repr(u8)]
pub enum MessageType {
    Authentication = 1,
    // ...
}

fn main() {
    let n = MessageType::Authentication as u8;
    println!("{}", n);
}
Run Code Online (Sandbox Code Playgroud)

  • 你不必定义这些值,默认情况下,Rust 枚举将从 0 开始计算它们的判别式,你可以[用 `as` 来实现 `From`](https://play.rust-lang.org/ ?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=0462ba80f8e39e260dfd39cf64b80d31) 以获得所需的语义 (2认同)