将十六进制字符串转换为十进制整数

tsf*_*144 26 parsing hex rust

我正在写一个Rust程序,它读取I2C总线并保存数据.当我读了I2C总线,我得到这样的十六进制值0x11,0x22等等.

现在,我只能将其作为字符串处理并按原样保存.有没有办法可以解析为整数?它有内置功能吗?

She*_*ter 35

在大多数情况下,您希望一次解析多个十六进制字节.在这些情况下,请使用十六进制包.

将其解析为整数

你想用from_str_radix.它是在整数类型上实现的.

use std::i64;

fn main() {
    let z = i64::from_str_radix("1f", 16);
    println!("{:?}", z);
}
Run Code Online (Sandbox Code Playgroud)

如果你的字符串实际上有0x前缀,那么你需要跳过它们.最好的方法是通过trim_start_matches:

use std::i64;

fn main() {
    let raw = "0x1f";
    let without_prefix = raw.trim_start_matches("0x");
    let z = i64::from_str_radix(without_prefix, 16);
    println!("{:?}", z);
}
Run Code Online (Sandbox Code Playgroud)

  • @ tsf144,它是切片语法.`&raw [2 ..]`是`raw`的子字符串,从`raw`的第二个字节开始. (3认同)
  • 请注意,“trim_start_matches”会重复删除前缀,因此也会解析“0x0x0x1f”。您可以使用“strip_prefix”仅删除一次,但需要区分两种情况。 (3认同)