对于我为锻炼做的练习(minesweeper任务),我需要将usize
转换为char
才能将其插入{std::string::String
1}}。
用最少的代码行描述问题:
let mut s = String::from(" ");
let mine_count: usize = 5; // This is returned from a method and will be a value between 1 and 8.
s.insert(0, _______); // So I get: "5 " at the underscores I do:
我目前的做法是:
mine_count.to_string().chars().nth(0).unwrap(); // For example: '2'
或者查看full example in the rust playground。不知何故,这并没有让我感到优雅。
我也尝试过:
mine_count as char; // where mine_count is of type u8
然而,当mine_count
添加到std::string::String
时,它会变成 - 例如 - \u{2}
,而不仅仅是'2'
:
let mine_count: u8 = 8;
s.insert(0, mine_count as char);
println!("{:?}", s);
输出:
"\u{8} "
转载here。
是否还有其他方法可以实现将1..8范围内的整数转换为单个字符(char
)的目标?
答案 0 :(得分:4)
我建议使用char::from_digit
以及使用它所需的演员(as u32
):
use std::char;
fn main() {
let mut s = String::from(" ");
let mine_count: u8 = 8; // or i8 or usize
s.insert(0, char::from_digit(mine_count as u32, 10).unwrap());
println!("{:?}", s);
}
编辑:根据新的示例案例更新代码
答案 1 :(得分:3)
然而,当将mine_count添加到std :: string :: String时,它会变成 - 例如 - \ u {2}而不仅仅是' 2'。
这是包含标量值char
的{{1}}与包含实际字符2
的{{1}}之间的差异。前几个UTF-8值(如ASCII文本编码)保留用于控制字符,并且不会显示可见的内容。在此上下文中将其显示为char
的原因是您使用debug formatting('2'
)打印了字符串。如果您尝试使用纯格式打印相同的字符串:
\u{2}
输出将包含一些不打算打印的内容,因此可能会显示占位符或根本不显示(可重现的here)。
为了将一位数字表示为相应的字符:(1)首先确保{:?}
在可预测的限制范围内,或者通过可恢复的错误或硬断言。 (2)然后,通过将数字转换为数字数字字符来转换数字。
let mut s = String::from(" ");
let mine_count: u8 = 8;
s.insert(0, mine_count as char);
println!("{}", s);
答案 2 :(得分:0)
是否有其他方法可以实现将1..8范围内的整数转换为单个字符的目标
使用查找表:
const LABELS: [char; 9] = ['0', '1', '2', '3', '4', '5', '6', '7', '8'];
fn main() {
LABELS[6_usize];
}