簡體   English   中英

在 Rust 中將 ascii 數組轉換為字符串的慣用方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM