我本周末在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)
首先,你不需要返回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)
| 归档时间: |
|
| 查看次数: |
1996 次 |
| 最近记录: |