2015-09-03 347 views
16

我正在编写一个读取I2C总线并保存数据的Rust程序。当我读I2C总线,我得到十六进制值,如0x11,0x22将十六进制字符串转换为十进制

现在,我只能处理这个字符串并保存它。有没有办法我可以解析成一个整数?有没有内置函数?

回答

25

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

use std::i64; 

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

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

use std::i64; 

fn main() { 
    let raw = "0x1f"; 
    let z = i64::from_str_radix(&raw[2..], 16); 
    println!("{:?}", z); 
} 
+0

太好了,谢谢!为了澄清,'[2 ..]'是如何跳过前两个空格? (如'0'和'x') – tsf144

+3

@ tsf144,它是切片语法。 '&raw [2 ..]'是'raw'的第二个字节开始的'raw'的一个子字符串。 –

+0

@ tsf144弗拉基米尔所说的。重要的部分是它是**字节**。在这种情况下,它看起来像有ASCII编码的字符串,所以一个字符==一个字节。 – Shepmaster

相关问题