2017-06-05 56 views
1

有沒有辦法將浮點數(f32f64)轉換爲我可以按位訪問的數據類型,如u32/u64?也就是對應的東西:如何將float轉換爲二進制而不使用不安全的代碼?

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

但沒有unsafe。該代碼對rules是安全的,儘管它可能不會在所有平臺上返回相同的值,特別是對於NaN。反向安全界面也很好。

回答

5

鏽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);  
} 
相關問題