如何将i32转换为表示ASCII字符的字符串

use*_*406 3 ascii rust

我本周末在Rust重新做一个项目,我需要将i32转换为ASCII字符,使用它作为字符代码.到目前为止我所有的都是一个可怕的match,我隐藏在文件的末尾.不幸的是,std::ascii不支持这种转换.目前我只是在寻找一种不那么荒谬/更像Rust(?)的方法来做到这一点.

fn to_ascii(i: &i32) -> String {
    let a = match *i {
        0 => "NUL",
        1 => "SOH",
        2 => "STX",
        // ...
        125 => "}",
        126 => "~",
        127 => "DEL",
        _ => "",
    }
    a
}
Run Code Online (Sandbox Code Playgroud)

llo*_*giq 9

首先,你不需要返回a String,a &'static str就足够了.其次,您可以简单地设置一个&'static str带有您喜欢的所有代码表示的s 数组,并使用它.get(_)来获取相关的字符串切片,只要所有的char代码都是连续的(如果我的ASCII权限正确则应该是这样).即使它们不是,你总是可以在空隙中放入空字符串.

代码应如下所示:

const CHARS: [&'static str; 128] = ["NUL", "SOH", "STX", .., "DEL"];

fn get_char_code(c: i32) -> &'static str {
    CHARS.get(c as usize).unwrap_or("")
}
Run Code Online (Sandbox Code Playgroud)