在Rust中将float64转换为十六进制

vbopmzt1  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(416)

我想知道如何将float 64(或float 32)转换为相应的二进制/十六进制格式。如果能指定字节序,那就太好了(我更喜欢以little-endian格式打印)。
链接帖子:How to convert hex string to a float in Rust?
谢谢!

bihw5rsg

bihw5rsg1#

使用f32::to_be_bytesf32::to_le_bytesf32::to_ne_bytes(取决于所需的字节序),然后格式化数组的结果元素:

let float: f32 = 123.45;
let bytes = float.to_le_bytes();
let hex = format!("{:02X}{:02X}{:02X}{:02X}", bytes[0], bytes[1], bytes[2], bytes[3]);
assert_eq!(hex, "66E6F642");

不需要不安全和危险的transmute
Rust Playground Link

yrdbyhpb

yrdbyhpb2#

这只是从the answer到您链接的问题的逆操作:

fn main() {
    // Hex string to 4-bytes, aka. u32
    let float: f32 = 18.9;
    
    let bytes = unsafe { std::mem::transmute::<f32, u32>(float) };
    
    let hex = format!("{:x}", bytes);
    
    // Print 41973333
    println!("{}", hex);
}

Rust Playground link
格式化前,对u32值(bytes)调用.from_be().from_le().swap_bytes()以更改字节顺序。对于较大的数据类型,请将f32u32更改为f64u64
类似地,这个问题的另一个答案(使用f32.from_bits)在f32.to_bits中有一个正逆函数(尽管这些函数仍然被标记为不稳定)。

相关问题