我正在编写一个Rust程序,它从I2C总线读取数据并保存。当我读取I2C总线时,我得到像0x11
、0x22
等十六进制的值。
目前,我只能将其处理为字符串并按原样保存。有没有一种方法可以将其解析为整数?是否有任何内置函数可用?
在大多数情况下,您需要同时解析多个十六进制字节。在这种情况下,请使用hex crate。
将此解析为整数
您需要使用from_str_radix
。它在整数类型上实现。
use std::i64;
fn main() {
let z = i64::from_str_radix("1f", 16);
println!("{:?}", z);
}
如果你的字符串实际上带有0x
前缀,那么你需要跳过它们。最好的方法是使用trim_start_matches
或strip_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);
}
&raw[2..]
是raw
字符串从第二个字节开始的子字符串。 - Vladimir Matveevtrim_start_matches
会重复删除前缀,因此它也可以解析0x0x0x1f
。您可以使用strip_prefix
只删除一次,但需要区分这两种情况。 - TheOperator