let hex = "100000000000000000".as_bytes().to_hex();
// hex == "313030303030303030303030303030303030"
println!("{:x}", 100000000000000000000000u64);
// literal out of range for u64
我如何获得该价值?
在Python中,我只需要调用hex(100000000000000000000000)
就可以得到'0x152d02c7e14af6800000'
。
to_hex()
来自hex crate。
答案 0 :(得分:3)
需要注意Rust中不同数字类型可表示值的范围。在这种特定情况下,该值超出了u64
的限制,但是u128
类型容纳了该值。以下代码输出的值与Python中的示例相同:
fn main() {
let my_string = "100000000000000000000000".to_string(); // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<u128>().unwrap();
let my_hex = format!("{:X}", my_int);
println!("{}", my_hex);
}
经过Rust Playground的确认:
152D02C7E14AF6800000
在一般情况下,需要明确使用任意精度算术。 What's the best crate for arbitrary precision arithmetic in Rust?关于Reddit的一些建议:
num_bigint
运行稳定,没有不安全的代码。ramp
使用不安全且无法在稳定的Rust上运行,但速度更快。rust-gmp
和rug
绑定到C语言中最新的bigint实现(GMP)。它们是最快的,具有最多的功能。您可能要使用其中之一。