從位元組陣列中,我想使用 ASCII 編碼將切片轉換為字串。解決方案
fn main() {
let buffer: [u8; 9] = [255, 255, 255, 255, 77, 80, 81, 82, 83];
let s = String::from_iter(buffer[5..9].iter().map(|v| { *v as char }));
println!("{}", s);
assert_eq!("PQRS", s);
}
看起來不太地道,而且有一股表現不佳的味道。我們能做得更好嗎?沒有外部板條箱?
uj5u.com熱心網友回復:
Rust 字串可以直接從 UTF-8 編碼的位元組緩沖區創建,如下所示:
fn main() {
let buffer: [u8; 9] = [255, 255, 255, 255, 77, 80, 81, 82, 83];
let s = std::str::from_utf8(&buffer[5..9]).expect("invalid utf-8 sequence");
println!("{}", s);
assert_eq!("PQRS", s);
}
如果輸入緩沖區包含無效的 UTF-8 序列,則操作可能會失敗,但是 ASCII 字符是有效的 UTF-8,因此在這種情況下它可以作業。
請注意,這里的型別s是&str,表示它是對 的參考buffer。這里沒有分配,因此操作非常高效。
看看它在行動:游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406432.html
標籤:
上一篇:由于String/StringBuilderEquality的最長回文邊緣情況
下一篇:Swift的String檔案中的“SwiftareUnicodecorrectandlocaleinsensitive”是什么意思?
