String 如何在字符串和之间转换;str、Vec<;u8>;及;[u8]?
像我这样的新Rustacean人很难处理这些类型:String 如何在字符串和之间转换;str、Vec<;u8>;及;[u8]?,string,rust,type-conversion,String,Rust,Type Conversion,像我这样的新Rustacean人很难处理这些类型:String,&str,Vec,和[u8] 最后,我希望有一个顿悟,突然明白为什么一些图书馆的电话使用其中一个。在此之前,我需要帮助规划每个惯用转换 鉴于这些类型: let st: &str = ...; let s: String = ...; let u: &[u8] = ...; let v: Vec<u8> = ...; let st:&str=。。。; 让s:String=。。。; 设u:&[u8]=
String
,&str
,Vec
,和[u8]
最后,我希望有一个顿悟,突然明白为什么一些图书馆的电话使用其中一个。在此之前,我需要帮助规划每个惯用转换
鉴于这些类型:
let st: &str = ...;
let s: String = ...;
let u: &[u8] = ...;
let v: Vec<u8> = ...;
let st:&str=。。。;
让s:String=。。。;
设u:&[u8]=。。。;
设v:Vec=。。。;
我想我已经弄明白了,但它们是地道的吗
&str->String String::from(st)
&str->和[u8]st.as_字节()
字符串->和str s.as_str()
&[u8]->&str str::来自_utf8(u)
Vec->String字符串::from_utf8(v)
最终,我需要这些类型的完整转换表:
let st: &str = ...;
let s: String = ...;
let u: &[u8] = ...;
let v: Vec<u8> = ...;
&str->String
&str->和[u8]
&str->Vec
字符串->&str
字符串->和[u8]
字符串->向量
&[u8]->&str
&[u8]->字符串
&[u8]>Vec
Vec->&str
向量->字符串
向量->和[u8]
From&str
有:&str->String
,String::from(st)
,st.to_String()
。st.to_owned()
- 但我建议你在一个项目中坚持其中一个。
的主要优点是可以将其用作String::from
方法的参数。因此,您可以经常使用map
x.map(String::from)来代替
x.map(String::from)
- 但我建议你在一个项目中坚持其中一个。
->&str
由&[u8]
st.as\u bytes()完成
->&str
是Vec
的组合,即&str->和[u8]>Vec
或st.as\u bytes().to\u Vec()
st.as\u bytes().to\u owned()
String
应仅在可用强制的情况下为String->&str
,在不可用强制的情况下为&s
s
与String->和[u8]
相同:&str->和[u8]
s.as_bytes()
有一个自定义方法:String->Vec
s.into_bytes()
和[u8]
由和[u8]->Vec
或u.to_owned()
完成。它们做同样的事情,但是u.to_Vec()
有一点好处,那就是对它返回的类型毫不含糊to_vec
&[u8]->&str实际上并不存在,这将是通过
str::from_utf8(u)
可以工作,但您应该更喜欢更好的错误处理(请参阅)str::from_utf8(u).unwrap()
是&[u8]->String
&[u8]->Result->Result的组合
有效,但更喜欢更好的错误处理(请参阅和)String::from_utf8(u).unwrap()
Vec
在有强制的情况下应该是Vec->和[u8]
,在没有强制的情况下应该是&v
与Vec->&str
相同,即Vec->&u8]->Result
str::from_utf8(&v)
有效,但更喜欢更好的错误处理(请参阅)str::from_utf8(&v).unwrap()
实际上并不存在,这将是Vec->String
通过Vec->Result
String::from_utf8(v)
有效,但更喜欢更好的错误处理(请参阅)String::from_utf8(v).unwrap()
&str
或&u8]
,就可以使用强制。Rustonomicon有一章介绍了强制站点的更多详细信息
太长,读不下去了
&str->String | String::from(s)或s.to_String()或s.to_owned()
&str->和[u8]| s.作为_字节()
&str->Vec | s.as_bytes().to_Vec()或s.as_bytes().to_owned())
字符串->&str |&s(如果可能的话)*else s.as_str()
字符串->和[u8]| s.作为_字节()
字符串->向量到字节()
&[u8]->&str|s.to_vec()或s.to_owned()
&[u8]->字符串| std::str::from_utf8(s).unwrap(),但不要**
&[u8]->Vec | String::from_utf8(s).unwrap(),但不要**
Vec->&str |&s如果可能的话*其他s.作为_切片()
Vec->String | std::str::from_utf8(&s).unwrap(),但不要**
Vec->&[u8]| String::from_utf8(s).unwrap(),但不要**
*目标应具有显式类型(即,检查器无法推断)
**请正确处理错误
OK,但是如何将单个u8变量更改为string?to_string()似乎不起作用,因为它在当前范围内为类型u8
喊出“没有名为as_string的方法”…我想要的是将一个小数字(如32)更改为字符串“32”。