[英]How do I convert a string into a vector of bytes in rust?
这可能是有史以来最愚蠢的 Rustlang 问题,但我 promise 我尽力在文档或 web 上的任何其他地方找到答案。
我可以像这样将字符串转换为字节向量:
let bar = bytes!("some string");
不幸的是我不能这样做
let foo = "some string";
let bar = bytes!(foo);
因为bytes!
需要一个字符串文字。
但是,如何将我的 foo 转换为字节向量?
(&str).as_bytes
给你一个字符串视图作为&[u8]
字节切片(可以在String
上调用,因为它解析为str
,并且还有String.into_bytes
将使用一个String
来给你一个Vec<u8>
。
如果您不需要字节的所有权,请使用.as_bytes
版本。
fn main() {
let string = "foo";
println!("{:?}", string.as_bytes()); // prints [102, 111, 111]
}
扩展上面的答案。 下面是几种不同类型之间的转换。
&str
到&[u8]
:
let my_string: &str = "some string";
let my_bytes: &[u8] = my_string.as_bytes();
&str
到Vec<u8>
:
let my_string: &str = "some string";
let my_bytes: Vec<u8> = my_string.as_bytes().to_vec();
String
到&[u8]
:
let my_string: String = "some string".to_owned();
let my_bytes: &[u8] = my_string.as_bytes();
String
到Vec<u8>
:
let my_string: String = "some string".to_owned();
let my_bytes: Vec<u8> = my_string.into_bytes();
在所有情况下,指定变量类型都是可选的。 只是添加以避免混淆。
`let v1: Vec<u8> = string.encode_to_vec();`
`let v2: &[u8] = string.as_bytes();`
两个工作差异,在一些库中使用字节的所有权!! 如果您使用 as_bytes() 看到编译器错误:必须是静态的。
例如: tokio_uring::fs::File::write_at()
获得字节的所有权!!
但如果您需要借用,请使用 as_bytes()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.