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

Я пишу программу 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_start_matches:

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);
}