簡體   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