将字符解析为u32

Das*_*h83 6 rust

正如问题所述,我该如何实现这一目标?

如果我有这样的代码:

let a = "29";
for c in a.chars() {
    println!("{}", c as u32);
}
Run Code Online (Sandbox Code Playgroud)

我得到的是2和9的unicode代码点:

  • 50
  • 57

我想要的是将这些字符解析为实际数字.

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书的相应章节中阅读有关正确错误处理的更多信息.

  • 谢谢,我觉得自己是SO中最愚蠢的用户。我认为我在学习 Rust 时遇到的主要问题之一是浏览文档。如果您搜索“Rust Char”,您将获得该模块的文档:[链接](https://doc.rust-lang.org/std/char/),其中不包括您提到的方法。我现在明白了,这是因为它是类型的一部分,而不是模块的一部分,从文档中看,“看那里”似乎并不明显。再次感谢! (2认同)
  • 反过来,作为一个 rust 初学者,这是我可以回答的第一个 rust 问题:-) 至于文档:我正在使用 Dash for mac,它只是您链接的文档的包装,但不知怎的,我发现东西更快那里比在网络上(例如,搜索 char 会引导您找到原始类型,而不是模块) (2认同)

lje*_*drz 8

好吧,您始终可以使用以下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。