如何在不使用不安全代码的情况下将float转换为二进制?

问题描述 投票:2回答:1

有没有办法将浮点数(f32f64)转换为我可以按位访问的数据类型,如u32 / u64?也就是说,对应于:

fn as_bits(i: f64) -> u64 {
    unsafe { mem::transmute(i) }
}

但没有unsafe。这个代码对于rules是安全的,即使它可能不会在所有平台上返回相同的值,特别是对于NaN。反向安全界面也不错。

floating-point rust ieee-754
1个回答
7
投票

Rust 1.20引入了f64::to_bitsf32::to_bits

fn main() {
    println!("{}", (4.2f64).to_bits())
}

在此之前,您需要使用不安全的函数transmute。它们产生相同的结果:

use std::mem;

fn main() {
    let float = 4.2f64;

    let via_method = float.to_bits();
    let via_transmute: u64 = unsafe { mem::transmute(float) };

    assert_eq!(via_method, via_transmute);    
}
© www.soinside.com 2019 - 2024. All rights reserved.