如何在不更改位的情况下在 f32 和 u32 之间进行转换?

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

所以我正在制作一个虚拟机,它接受 32 位序列(因此是多个 32 位批次),它们表示为 u32,但实际上该数字可能是 f32,但只是包装在 u32 中。我的程序知道 u32 实际上何时代表 f32,但我不确定如何转换它们。如果我使用

as
它会进行四舍五入还是只会在格式之间推送位(我想要后者)?因为我想要的是在 u32 和 f32 之间进行转换而不更改任何底层位,所以我只想将其称为不同的东西。例如,我担心我的
as u32
不会做我想要它做的事情:

pub fn give_velocity(spell: &mut Spell, parameters: &[u32], should_execute: bool) -> Option<u32> {
    match should_execute {
        true => Some((spell.energy * sqrt((parameters[0] * parameters[0] + parameters[1] * parameters[1] + parameters[2] * parameters[2]) as f64)) as u32),
        false => None
    }
}

也忽略

should_execute
现在没用的事实,它还没有完成。

rust casting
1个回答
0
投票

正如@Dogbert和@'Filipe Rodrigues'的回答,使用

to_bits()
可以工作,但需要中间转换,这是固定代码:

pub fn give_velocity(spell: &mut Spell, parameters: &[u32], should_execute: bool) -> Option<u32> {
    match should_execute {
        true => Some(f32::to_bits((spell.energy * sqrt((parameters[0] * parameters[0] + parameters[1] * parameters[1] + parameters[2] * parameters[2]) as f64)) as f32)),
        false => None
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.