Преобразование шестнадцатеричной строки в десятичное целое

Я пишу программу Rust, которая считывает данные с шины I2C и сохраняет данные. Когда я читаю шину I2C, я получаю шестнадцатеричные значения, такие как 0x11, 0x22, так далее.

Прямо сейчас я могу обработать это только как строку и сохранить как есть. Есть ли способ, которым я могу разобрать это в целое число? Есть ли встроенная функция для этого?

1 ответ

Решение

В большинстве случаев вы хотите проанализировать более одного шестнадцатеричного байта одновременно. В этих случаях используйте шестигранный ящик.

разобрать это в целое число

Вы хотите использовать from_str_radix, Это реализовано на целочисленных типах.

use std::i64;

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

Если ваши строки на самом деле имеют 0x Префикс, тогда вам нужно будет пропустить их. Лучший способ сделать это через trim_left_matches:

use std::i64;

fn main() {
    let raw = "0x1f";
    let without_prefix = raw.trim_left_matches("0x");
    let z = i64::from_str_radix(without_prefix, 16);
    println!("{:?}", z);
}
Другие вопросы по тегам