繁体   English   中英

如何将字符串转换为 rust 中的字节向量?

[英]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();

&strVec<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();

StringVec<u8>

let my_string: String = "some string".to_owned();
let my_bytes: Vec<u8> = my_string.into_bytes();

在所有情况下,指定变量类型都是可选的。 只是添加以避免混淆。

游乐场链接: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=5ad228e45a38b4f097bbbba49100ecfc

 `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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM