Rust 这是从二进制文件读取结构的最自然的方式吗? 我刚刚意识到这与

Rust 这是从二进制文件读取结构的最自然的方式吗? 我刚刚意识到这与,rust,Rust,这是使用Rust从二进制文件读取结构的最自然的方法吗?它可以工作,但似乎有点奇怪(为什么我不能全部填充结构?) 看看板条箱:解析二进制数据非常有用 使用nom,您可以使用以下内容编写解析器(未经测试): 命名!(记录,链子! (门闩:le_u32 ~总能量:le_f32 ~x_cm:leu f32 ~y_cm:le_f32 ~x_因为:le_f32 ~y_cos:le_f32 ~weight:leu f32 , { 记录{ 闩锁:闩锁, 总能量:总能量, x_cm:x_cm, y_-cm:y_-

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

看看板条箱:解析二进制数据非常有用

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

命名!(记录,链子!
(门闩:le_u32
~总能量:le_f32
~x_cm:leu f32
~y_cm:le_f32
~x_因为:le_f32
~y_cos:le_f32
~weight:leu f32
, {
记录{
闩锁:闩锁,
总能量:总能量,
x_cm:x_cm,
y_-cm:y_-cm,
x_cos:x_cos,
y_cos:y_cos,
重量:重量,,
}
}
)
);

太棒了,真不敢相信我错过了那个。正如你们所看到的,我发现字节顺序,但nom看起来更适合我正在做的事情。谢谢大家!@亨利:ByteOrder是一个处理字节排序(无论是解析还是格式化)的低级板条箱,而nom是一个成熟的解析器生成器板条箱:)什么是记录?解析函数的名称?您可以将此问题标记为现有问题的副本,而不是在问题中编辑链接。
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]),
        }
    }
}
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,
        }
    }
    )
);