在 Rust 中,将八进制的字符串表示形式转换为 u32
In rust, convert a string representation of an octal into a u32
我正在使用以下代码将八进制的字符串表示形式转换为 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));
}
相反,我得到的是:
Err(
ParseIntError {
kind: InvalidDigit,
},
)
根据 this 看来它的格式是正确的,因为它是八进制,它是以 8 为底,因此您需要基数 8。
我做错了什么?
删除 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(())
}
我正在使用以下代码将八进制的字符串表示形式转换为 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));
}
相反,我得到的是:
Err(
ParseIntError {
kind: InvalidDigit,
},
)
根据 this 看来它的格式是正确的,因为它是八进制,它是以 8 为底,因此您需要基数 8。
我做错了什么?
删除 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(())
}