相关疑难解决方法(0)

String,&str,Vec <u8>和&[u8]的惯用语转换

:像我这样的新Rustacean杂耍这些类型的斗争String,&str,Vec<u8>,&[u8].

随着时间的推移,我希望有一个顿悟,并突然得到一些库调用使用其中一个的原因.在那之前,我需要帮助来确定每个惯用过渡.

鉴于以下类型:

let st: &str = ...;
let s:  String = ...;
let u:  &[u8] = ...;
let v:  Vec<u8> = ...;
Run Code Online (Sandbox Code Playgroud)

我想我已经弄清了这些,但它们是惯用的吗?

&str    -> String    String::from(st)
&str    -> &[u8]     st.as_bytes()
String  -> &str      s.as_str()
&[u8]   -> &str      str::from_utf8(u)
Vec<u8> -> String    String::from_utf8(v)
Run Code Online (Sandbox Code Playgroud)

最终,我想要一个完整的转换表,这些类型:

&str    -> String
&str    -> &[u8]
&str    -> Vec<u8>
String  -> &str
String  -> &[u8]
String  -> Vec<u8>
&[u8]   -> &str
&[u8]   -> String
&[u8]   -> Vec<u8> …
Run Code Online (Sandbox Code Playgroud)

type-conversion rust

27
推荐指数
1
解决办法
2459
查看次数

如何将&str转换为* const u8?

我有一个功能

extern "C" {
    fn log_impl(ptr: *const u8);
}

fn log(s: &str) {
    log_impl(s.as_bytes() as *const u8);
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

extern "C" {
    fn log_impl(ptr: *const u8);
}

fn log(s: &str) {
    log_impl(s.as_bytes() as *const u8);
}
Run Code Online (Sandbox Code Playgroud)

与我要执行的操作最相似的问题是 将str转换为&[u8]

rust

4
推荐指数
1
解决办法
2234
查看次数

标签 统计

rust ×2

type-conversion ×1