将str转换为&[u8]

yni*_*ous 38 string slice rust

这看起来微不足道,但我找不到办法.

例如,

fn f(s: &[u8]) {}

pub fn main() {
    let x = "a";
    f(x)
}
Run Code Online (Sandbox Code Playgroud)

无法编译:

error: mismatched types:
 expected `&[u8]`,
    found `&str`
(expected slice,
    found str) [E0308]
Run Code Online (Sandbox Code Playgroud)

但是,文件指出:

strs的实际表示具有与切片的直接映射:&str与&[u8]相同.

fjh*_*fjh 50

您可以使用as_bytes方法:

fn f(s: &[u8]) {}

pub fn main() {
    let x = "a";
    f(x.as_bytes())
}
Run Code Online (Sandbox Code Playgroud)

或者,在您的具体示例中,您可以使用字节文字:

let x = b"a";
f(x)
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,文档与*表示*有关,但从概念上讲,字符串片保证其内容是有效的UTF-8,而字节片则不是. (6认同)