【问题标题】:Converting a str to a &[u8]将 str 转换为 &[u8]
【发布时间】:2015-09-26 04:21:47
【问题描述】:

这似乎微不足道,但我找不到办法。

例如,

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

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

编译失败:

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

但是,documentation 声明:

str 的实际表示直接映射到切片:&str 与 &[u8] 相同。

【问题讨论】:

  • 事实上,这是该错误消息的大约五个谷歌结果之一,这对我来说似乎很疯狂!我在 1.0 后的第一个测试程序中遇到了这个问题(实现“cat”)。

标签: string rust slice


【解决方案1】:

您可以使用as_bytes 方法:

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

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

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

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

【讨论】:

  • 我想补充一点,文档与 representation 相关,但从概念上讲,字符串切片保证其内容是有效的 UTF-8,而字节切片则不然t.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2018-06-10
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多