buffer是从二进制文件读取的Vec;
let mut buffer: std::vec::Vec<u8>=Vec::new();
file.read_to_end(&mut buffer);
下面一段从Vec(u8) 转成Vec(u32) 请问 怎么用closure 来完成? let u32_buffer:Vec=buffer.iter().enumerate().....collect();
let mut u32_buffer:Vec<u32>=Vec::new();
let mut byte_u8:[u8;4]=[0;4];
for (i, n) in buffer.iter().enumerate() {
let k = (i %4) as usize;
if (i % 4)==0 && i !=0 {
u32_buffer.push(u32::from_le_bytes(byte_u8));
// print!("{:#?},{}",byte_u8,n);
};
byte_u8[k]=*n;
}
u32_buffer.push(u32::from_le_bytes(byte_u8));
1
共 6 条评论, 1 页
评论区
写评论谢谢 ok!
正好下面报错 不能这样 expected struct
std::vec::Vec
, found closure--
👇
Neutron3529: 如果你能保证buffer的长度是4的倍数,或许你根本不需要closure
这段话跟你的程序,在保证buffer长度是4的倍数的情况下,输出一致,但简单很多
--
👇
rdigua: ....
如果你能保证buffer的长度是4的倍数,或许你根本不需要closure
这段话跟你的程序,在保证buffer长度是4的倍数的情况下,输出一致,但简单很多
--
👇
rdigua: ....
Great. Thanks. 脑子慢 反应不过来。
--
👇
Neutron3529: 看明白你想做什么了
如果用closure,直接写不行吗?
--
👇
rdigua: 已经check掉了 如果不是4的倍数 说明格式不对 直接退出
--
👇
Neutron3529: 看着这个需求就想一个unsafe把Vec的指针转换成Vec的指针……
有一个问题,如果Vec的长度不是4的倍数,尾巴应该怎么处理?
我的意思是,vec![53,42]跟vec![53,42,0,0]应该转换成相同的u32吗?
--
如果上面那句话正确的话,你可以试试
.iter_mut().into_slice().chunks(4).map(|x|(不确定collect怎么写,或许可以用u32::from之类的东西)).collect()
一个比较脏的实现是这样的:
看明白你想做什么了
如果用closure,直接写不行吗?
--
👇
rdigua: 已经check掉了 如果不是4的倍数 说明格式不对 直接退出
--
👇
Neutron3529: 看着这个需求就想一个unsafe把Vec的指针转换成Vec的指针……
有一个问题,如果Vec的长度不是4的倍数,尾巴应该怎么处理?
我的意思是,vec![53,42]跟vec![53,42,0,0]应该转换成相同的u32吗?
--
如果上面那句话正确的话,你可以试试
.iter_mut().into_slice().chunks(4).map(|x|(不确定collect怎么写,或许可以用u32::from之类的东西)).collect()
一个比较脏的实现是这样的:
已经check掉了 如果不是4的倍数 说明格式不对 直接退出
--
👇
Neutron3529: 看着这个需求就想一个unsafe把Vec的指针转换成Vec的指针……
有一个问题,如果Vec的长度不是4的倍数,尾巴应该怎么处理?
我的意思是,vec![53,42]跟vec![53,42,0,0]应该转换成相同的u32吗?
--
如果上面那句话正确的话,你可以试试
.iter_mut().into_slice().chunks(4).map(|x|(不确定collect怎么写,或许可以用u32::from之类的东西)).collect()
一个比较脏的实现是这样的:
看着这个需求就想一个unsafe把Vec的指针转换成Vec的指针……
有一个问题,如果Vec的长度不是4的倍数,尾巴应该怎么处理?
我的意思是,vec![53,42]跟vec![53,42,0,0]应该转换成相同的u32吗?
--
如果上面那句话正确的话,你可以试试
.iter_mut().into_slice().chunks(4).map(|x|(不确定collect怎么写,或许可以用u32::from之类的东西)).collect()
一个比较脏的实现是这样的: