rust - 这是从二进制文件中读取结构的最自然方式吗?

标签 rust

我刚刚意识到这与 What is the best way to parse binary protocols with Rust 非常相似


这是使用 Rust 从二进制文件读取结构的最自然方式吗?它可以工作,但看起来有点奇怪(为什么我不能完全填充结构?)。

extern crate byteorder;
use byteorder::{ByteOrder, LittleEndian};

struct Record {
    latch: u32,
    total_energy: f32,
    x_cm: f32,
    y_cm: f32,
    x_cos: f32,
    y_cos: f32,
    weight: f32
}

impl Record {
    fn make_from_bytes(buffer: &[u8]) -> Record {
        Record {
            latch: LittleEndian::read_u32(&buffer[0..4]),
            total_energy: LittleEndian::read_f32(&buffer[4..8]),
            x_cm: LittleEndian::read_f32(&buffer[8..12]),
            y_cm: LittleEndian::read_f32(&buffer[12..16]),
            x_cos: LittleEndian::read_f32(&buffer[16..20]),
            y_cos: LittleEndian::read_f32(&buffer[20..24]),
            weight: LittleEndian::read_f32(&buffer[24..28]),
        }
    }
}

最佳答案

看看 nom crate:解析二进制数据非常有用。

使用 nom,您可以使用类似以下内容(未测试)编写您的解析器:

named!(record<Record>, chain!
    ( latch: le_u32
    ~ total_energy: le_f32
    ~ x_cm: le_f32
    ~ y_cm: le_f32
    ~ x_cos: le_f32
    ~ y_cos: le_f32
    ~ weight: le_f32
    , {
        Record {
            latch: latch,
            total_energy: total_energy,
            x_cm: x_cm,
            y_cm: y_cm,
            x_cos: x_cos,
            y_cos: y_cos,
            weight: weight,
        }
    }
    )
);

关于rust - 这是从二进制文件中读取结构的最自然方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144526/

相关文章:

rust - 向量元组的字符串连接

带有 arg 函数的 Rust 函数

json - JSON响应的反序列化在字符串中保留引号

rust - 文件或模块级别 'feature' 可能吗?

rust - 无法搬出借用的内容和Builder模式

rust - 我的类似RefCell的结构上的rowe_mut()不起作用

serialization - 序列化元组类型 - 模块 core::tuple 是私有(private)的

rust - wgpu-rs : Putting a Matrix3 into a vertex shader results in odd behavior but using a Matrix4 works fine

loops - 循环时,.iter() 与引用 (&) 有何不同?

rust - 从格式化的输入构建树