如何将十六进制字符串转换为Rust中的浮点数?

时间:2017-04-30 08:55:03

标签: rust

将十六进制字符串转换为浮点数的最简单方法是什么? (不使用第三方包装箱)

Rust是否提供了与Python struct.unpack('!f', bytes.fromhex('41973333'))

等效的内容

请参阅此问题Python& Java,提及参考。

2 个答案:

答案 0 :(得分:4)

如果没有外部板条箱,这很容易:

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

Playground link.

答案 1 :(得分:4)

其中f32::from_bits以安全代码执行transmute。请注意,转换与struct.unpack不同,因为struct.unpack允许您指定字节顺序并且具有明确定义的IEEE表示。