如何在Rust中将十六进制字符串转换为f64?

6tqwzwtp  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(110)

基于以下问题:
How to convert hex string to a float in Rust?
我尝试了以下代码:

fn main() {
    // Hex string to 8 bytes, aka. u64
    let bytes = u64::from_str_radix("c51981cb", 16).unwrap();

    // Reinterpret 8 bytes as f64:
    let float = unsafe { std::mem::transmute::<u64, f64>(bytes) };
    println!("float: {}", float);
}

字符串
这将编译并运行,但根据https://www.h-schmidt.net/FloatConverter/IEEE754.html,答案应该是-2456.11206055,而不是0.000....我得到的号码。
我对BE/LE有问题吗?还是我犯了别的错误?

a11xaf1n

a11xaf1n1#

您链接的计算器是用于单精度浮点值的,但您的代码假定为双精度浮点,实际上将单精度浮点类型转换为u32f32会得到预期的结果:

fn main() {
    // Hex string to 4 bytes, aka. u32
    let bits = u32::from_str_radix("c51981cb", 16).unwrap();
    // Reinterpret 4 bytes as f32:
    let float = f32::from_bits(bits);
    println!("float: {float:.8}"); //float: -2456.11206055
}

字符串

相关问题