:像我这样的新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) 我有一个功能
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]。