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

63

我正在编写一个Rust程序,它从I2C总线读取数据并保存。当我读取I2C总线时,我得到像0x110x22等十六进制的值。

目前,我只能将其处理为字符串并按原样保存。有没有一种方法可以将其解析为整数?是否有任何内置函数可用?

1个回答

100

在大多数情况下,您需要同时解析多个十六进制字节。在这种情况下,请使用hex crate

将此解析为整数

您需要使用from_str_radix。它在整数类型上实现。

use std::i64;

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

如果你的字符串实际上带有0x前缀,那么你需要跳过它们。最好的方法是使用trim_start_matchesstrip_prefix

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);
}

太好了,谢谢!只是为了澄清一下,'[2..]' 是用来跳过前两个空格的吗?(就像在 '0' 和 'x' 上方) - tsf144
3
@tsf144,这是切片语法。&raw[2..]raw 字符串从第二个字节开始的子字符串。 - Vladimir Matveev
1
@JakeIreland 不,这在32位机器上不会失败。 - Shepmaster
1
请注意,trim_start_matches 会重复删除前缀,因此它也可以解析 0x0x0x1f。您可以使用 strip_prefix 只删除一次,但需要区分这两种情况。 - TheOperator
1
@AthulMuralidhar 目前无法为编译时值调用 trait 方法,因此没有直接的解决方案。 - Shepmaster
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接