[英]Idiomatic way to convert ascii array to string in Rust
從字節數組中,我想使用 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);
}
看起來不太地道,而且有一股表現不佳的味道。 我們能做得更好嗎? 沒有外部板條箱?
可以從 UTF-8 編碼的字節緩沖區直接創建 Rust 字符串,如下所示:
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
的引用。 這里沒有分配,因此操作非常高效。
看看它在行動: 游樂場鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.