bell 发表于 2021-08-04 08:26
data是从文件读取的bytes数据。如何截取data中指定位置区间的数据到指定类型的Vector中(注意不能影响data),有点类似于protobuff之类的协议解析。
感谢,好像nom也可以实现
-- 👇 Bai-Jinlin: 我随手写了一个,你要的是不是这个效果?
use std::mem::size_of; fn TArray<'a, T>(buffer: &'a [u8], offset: usize, len: usize) -> Option<Vec<T>> where T: serde::Deserialize<'a>, { let buffer = buffer.get(offset..)?; if buffer.len() < size_of::<T>() * len { return None; } let mut v = Vec::with_capacity(len); for i in 0..len { let i = i * size_of::<T>(); let d = bincode::deserialize::<T>(&buffer[i..i + size_of::<T>()]); v.push(d.ok()?); } Some(v) } fn main() { let a = [ 5, 5, 5, 5, 247, 28, 0, 0, 61, 2, 0, 0, 26, 0, 0, 0, 5, 5, 5, 5, ]; let v = TArray::<i32>(&a, 4, 3); assert_eq!(v, Some(vec![7415, 573, 26])); }
我随手写了一个,你要的是不是这个效果?
👇 Bai-Jinlin: bincode
bincode
评论区
写评论感谢,好像nom也可以实现
--
👇
Bai-Jinlin: 我随手写了一个,你要的是不是这个效果?
我随手写了一个,你要的是不是这个效果?
类似于js中 new Int32Array(data, 16, 2) new Float32Array(data, 80, 2) 这种 bincode是按照序列化成指定类型的vector 好像需要的不是这种
👇
Bai-Jinlin: bincode
bincode