如何将一个 &str 转换为一个 &[u8]

114

这看起来很简单,但我找不到方法来实现。

例如,

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

pub fn main() {
    let x = "a";
    f(x)
}

编译失败,错误信息如下:

error: mismatched types:
 expected `&[u8]`,
    found `&str`
(expected slice,
    found str) [E0308]

文档指出:

str 的实际表示与 slices 直接映射:&str 等同于 &[u8]。


3
这个错误信息的谷歌搜索结果只有约五条,这对我来说感觉有些不可思议!我在第一个1.0版本后的测试程序中遇到了这个问题(实现“cat”功能)。 - Derrick Turk
我在寻找一种将&str转换为Vec<u8>的方法时,偶然发现了这个问题。对于像我一样的人,我在这个问题中找到了答案:https://stackoverflow.com/questions/41034635/how-do-i-convert-between-string-str-vecu8-and-u8,这个问题给出了一个更全面的答案。 - undefined
1个回答

129

您可以使用 as_bytes 方法:

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

pub fn main() {
    let x = "a";
    f(x.as_bytes())
}

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

let x = b"a";
f(x)

10
我想补充一点,文档涉及到的是表示,但从概念上讲,字符串切片保证其内容是有效的UTF-8,而字节切片则不是。 - llogiq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接