2015-09-03 5 views
16

Я пишу программу Rust, которая считывает с шины I2C и сохраняет данные. Когда я читаю шину 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

Смежные вопросы