es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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ón std::fs::read devuelve un vector de bytes y la función eight_bytes_to_array convierte una porción de 8 bytes en un array de tamaño fijo, que luego puede ser convertido a f64 utilizando la función from_be_bytes (asumiendo un orden de bytes big-endian). Este proceso se puede repetir para extraer todos los valores f64 del archivo.

Comments are closed.