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

Floating point 如何在不使用不安全代码的情况下将浮点转换为二进制?,floating-point,rust,ieee-754,Floating Point,Rust,Ieee 754,有没有办法将浮点数(f32或f64)转换为我可以按位访问的数据类型,如u32/u64?也就是说,对应于: fn as_bits(i: f64) -> u64 { unsafe { mem::transmute(i) } } 但是没有不安全的。根据,此代码是安全的,即使它可能不会在所有平台上返回相同的值,特别是在NAN上。反向安全界面也很不错。引入了Rust 1.20,并且: 在此之前,您需要使用不安全功能transmute。它们产生相同的结果: use std::mem; fn

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

fn as_bits(i: f64) -> u64 {
    unsafe { mem::transmute(i) }
}
但是没有
不安全的
。根据,此代码是安全的,即使它可能不会在所有平台上返回相同的值,特别是在NAN上。反向安全界面也很不错。

引入了Rust 1.20,并且:

在此之前,您需要使用不安全功能
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);    
}
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);    
}