2015-09-03 388 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

相關問題