在 Rust 中,将八进制的字符串表示形式转换为 u32

The*_*tix 1 integer data-conversion octal rust

我使用以下代码将八进制的字符串表示形式转换为u32

pub fn umask() -> String {
    match env::var("UMASK") {
        Ok(res) => res.into(),
        _ => "777".into()
    }
}

fn main() {
    println!("{:#?}", u32::from_str_radix(format!("0o{}", umask()).as_str(), 8));
}
Run Code Online (Sandbox Code Playgroud)

相反,我得到的是:

Err(
    ParseIntError {
        kind: InvalidDigit,
    },
)
Run Code Online (Sandbox Code Playgroud)

根据这个,它看起来格式正确,并且由于它是八进制,它的基数为 8,因此基数 8 就是您所需要的。

我究竟做错了什么?

jus*_*nas 5

删除0o前缀。from_str_radix不需要任何类型的前缀,因为基数已经作为单独的参数给出。

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("{}", u32::from_str_radix("777", 8)?); // Prints: 511
    println!("{}", u32::from_str_radix("0777", 8)?); // Prints: 511
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)