正如问题所述,我该如何实现这一目标?
如果我有这样的代码:
let a = "29";
for c in a.chars() {
println!("{}", c as u32);
}
Run Code Online (Sandbox Code Playgroud)
我得到的是2和9的unicode代码点:
我想要的是将这些字符解析为实际数字.
han*_*ast 12
char::to_digit(radix)那样做.radix表示"基数",即10为十进制,16为十六进制等:
let a = "29";
for c in a.chars() {
println!("{:?}", c.to_digit(10));
}
Run Code Online (Sandbox Code Playgroud)
它返回一个Option,所以你需要unwrap()它,或者更好:expect("that's no number!").您可以在Rust书的相应章节中阅读有关正确错误处理的更多信息.
好吧,您始终可以使用以下hacky解决方案:
fn main() {
let a = "29";
for c in a.chars() {
println!("{}", c as u32 - 48);
}
}
Run Code Online (Sandbox Code Playgroud)
ASCII数字使用 48 到 57 之间的值进行编码,因此当您有一个包含字符 2 和 9 的字符串并尝试将它们解释为整数时,您会得到 50 和 57。要获得它们的预期值,您只需从它们中减去 48。