如何在不使用不安全代码的情况下将float转换为二进制?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用不安全代码的情况下将float转换为二进制?相关的知识,希望对你有一定的参考价值。
有没有办法将浮点数(f32
或f64
)转换为我可以按位访问的数据类型,如u32
/ u64
?也就是说,对应于:
fn as_bits(i: f64) -> u64 {
unsafe { mem::transmute(i) }
}
但没有unsafe
。这个代码对于rules是安全的,即使它可能不会在所有平台上返回相同的值,特别是对于NaN。反向安全界面也不错。
答案
Rust 1.20引入了f64::to_bits
和f32::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);
}
以上是关于如何在不使用不安全代码的情况下将float转换为二进制?的主要内容,如果未能解决你的问题,请参考以下文章
对于进程间 COM 对象,在不使用 QueryInterface 的情况下将 IDispatch* 转换为 IUnknown* 是不是安全?
java bindings - 如何在不获取-0.0值的情况下将float绑定到jtable?