如何将非常大的十进制字符串转换为十六进制


let hex = "100000000000000000".as_bytes().to_hex();
// hex == "313030303030303030303030303030303030"
println!("{:x}", 100000000000000000000000u64);
// literal out of range for u64

我怎样才能得到那个值?

在Python中,我只需要调用hex(100000000000000000000000),就可以得到'0x152d02c7e14af6800000'

to_hex()来自六角形板条箱。

需要注意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

在一般情况下,需要明确使用任意精度的算术。Rust中任意精度运算的最佳机箱是什么?在Reddit上:

  • num_bigint在稳定环境下工作,没有不安全的代码
  • ramp使用了不安全的,不适用于稳定的Rust,但速度更快
  • CCD_ 8和CCD_。它们速度最快,功能最多。你可能想用其中一个

最新更新