如何将切片与字节字符串文字进行比较?

rui*_*eco 1 rust

我有一个方法试图将 [u8] 的切片与多个字节字符串文字匹配:

pub(crate) fn from_slice(slice: &[u8]) -> Option<SqlStateCode> {
    match slice {
      b"3030303030" => Some(SqlStateCode::SuccessfulCompletion),
      b"3031303030" => Some(SqlStateCode::Warning),
      b"3031303043" => Some(SqlStateCode::DynamicResultSetsReturned),
      _=> None
    }
}
Run Code Online (Sandbox Code Playgroud)

除了它不会工作,除非我用数组替换字节字符串文字:

[30, 31, 30, 30, 43] => Some(SqlStateCode::DynamicResultSetsReturned)
Run Code Online (Sandbox Code Playgroud)

有没有办法使这个工作与文字?

Skg*_*and 5

您的字节字符串文字不正确;字节字符串文字b"3031303043"不对应于 slice[30, 31, 30, 30, 43]而是对应于slice [51, 48, 51, 49, 51, 48, 51, 48, 52, 51]

这是因为文字中的每个字符都被切片中的 ASCII 值替换。

[30, 31, 30, 30, 43]用于控制字符的十六进制转义序列的相应字节字符串文字将是b"\x1E\x1F\x1E\x1E+".