[英]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.