Rust 这是从二进制文件读取结构的最自然的方式吗? 我刚刚意识到这与
这是使用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_-
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,
}
}
)
);