Chr*_*oph 20 type-conversion rust
这可能是有史以来最肮脏的Rustlang问题,但我保证我会尽力在文档或网络上的任何其他地方找到答案.
我可以将字符串转换为字节向量,如下所示:
let bar = bytes!("some string");
Run Code Online (Sandbox Code Playgroud)
不幸的是我不能这样做
let foo = "some string";
let bar = bytes!(foo);
Run Code Online (Sandbox Code Playgroud)
因为bytes!
需要一个字符串文字.
但是,如何将我的foo转换为字节向量?
huo*_*uon 27
(&str).as_bytes
给你一个字符串的视图作为一个&[u8]
字节切片(可以调用,String
因为它derefs str
,并且String.into_bytes
还会消耗一个String
给你一个Vec<u8>
.
.as_bytes
如果您不需要字节的所有权,请使用该版本.
fn main() {
let string = "foo";
println!("{:?}", string.as_bytes()); // prints [102, 111, 111]
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,转换函数的命名约定在这些情况下很有用,因为它们可以让您大致了解您可能要查找的名称.
Ral*_*ops 25
扩展上面的答案。以下是类型之间的一些不同转换。
&str
到&[u8]
:
let my_string: &str = "some string";
let my_bytes: &[u8] = my_string.as_bytes();
Run Code Online (Sandbox Code Playgroud)
&str
到Vec<u8>
:
let my_string: &str = "some string";
let my_bytes: Vec<u8> = my_string.as_bytes().to_vec();
Run Code Online (Sandbox Code Playgroud)
String
到&[u8]
:
let my_string: String = "some string".to_owned();
let my_bytes: &[u8] = my_string.as_bytes();
Run Code Online (Sandbox Code Playgroud)
String
到Vec<u8>
:
let my_string: String = "some string".to_owned();
let my_bytes: Vec<u8> = my_string.into_bytes();
Run Code Online (Sandbox Code Playgroud)
在所有情况下,指定变量类型都是可选的。只是添加以避免混淆。
归档时间: |
|
查看次数: |
11648 次 |
最近记录: |