Как преобразовать шестнадцатеричную строку в число с плавающей точкой в ​​Rust?

Какой самый простой способ конвертировать шестнадцатеричную строку в число с плавающей точкой? (без использования сторонних ящиков).

Предоставляет ли Rust какой-то эквивалент Python struct.unpack('!f', bytes.fromhex('41973333'))


Смотрите этот вопрос для Python & Java, упомянув для справки.

2 ответа

Решение

Это довольно легко без внешних ящиков:

fn main() {
    // Hex string to 4-bytes, aka. u32
    let bytes = u32::from_str_radix("41973333", 16).unwrap();

    // Reinterpret 4-bytes as f32:
    let float = unsafe { std::mem::transmute::<u32, f32>(bytes) };

    // Print 18.9
    println!("{}", float);
}

Ссылка на игровую площадку.

Там в f32::from_bits который выполняет transmute в безопасном коде. Обратите внимание, что трансмутация не совпадает с struct.unpack, поскольку struct.unpack позволяет указывать порядковый номер и имеет четко определенное представление IEEE.

Другие вопросы по тегам