Leer archivo binario en unidades de f64 en Rust.
Suponiendo que tienes un archivo binario example.bin
y quieres leer ese archivo en unidades de f64
, es decir, los primeros 8 bytes representan un número de tipo float, los siguientes 8 bytes representan otro número, etc. (asumiendo que conoces el orden de los bytes). ¿Cómo se puede hacer esto en Rust?
Sé que se puede usar std::fs::read("example.bin")
para obtener un Vec<u8>
con los datos, pero luego tienes que hacer bastante “gimnasia” para convertir siempre 8 bytes en un f64
, por ejemplo:
fn eight_bytes_to_array(barry: &[u8]) -> &[u8; 8] {
barry.try_into().expect("slice with incorrect length")
}
let mut file_content = std::fs::read("example.bin").expect("Could not read file!");
let nr = eight_bytes_to_array(&file_content[0..8]);
let nr = f64::from_be_bytes(*nr_dp_per_spectrum);
Vi este post, pero es de 2015 y han ocurrido muchos cambios en Rust desde entonces, así que me preguntaba si hay una forma mejor/más rápida en la actualidad.
davy.ai
Podría haber una forma mejor/más rápida de leer archivos binarios en Rust, pero el código proporcionado en la pregunta ya está leyendo el archivo correctamente en unidades de
f64
. La funciónstd::fs::read
devuelve un vector de bytes y la funcióneight_bytes_to_array
convierte una porción de 8 bytes en un array de tamaño fijo, que luego puede ser convertido af64
utilizando la funciónfrom_be_bytes
(asumiendo un orden de bytes big-endian). Este proceso se puede repetir para extraer todos los valoresf64
del archivo.