【发布时间】:2019-06-25 15:30:16
【问题描述】:
我怎样才能将Vec<u32> 转换为字节,这样[1, 2, 4] 应该给我[1, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0],然后取反字节并将它们转换回整数向量?
我只知道如何将[u8; 4]转换成整数。
【问题讨论】:
标签: rust
我怎样才能将Vec<u32> 转换为字节,这样[1, 2, 4] 应该给我[1, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0],然后取反字节并将它们转换回整数向量?
我只知道如何将[u8; 4]转换成整数。
【问题讨论】:
标签: rust
也许你正在寻找ByteOrder:
use byteorder::{ByteOrder, LittleEndian};
fn main() -> () {
let rdr = vec![1, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0];
let mut dst = [0; 3];
LittleEndian::read_u32_into(&rdr, &mut dst);
assert_eq!([1,2,4], dst);
let mut bytes = [0; 12];
LittleEndian::write_u32_into(&dst, &mut bytes);
assert_eq!(rdr, bytes);
}
并将箱子添加到 Cargo.toml
[dependencies]
byteorder = "1.4.3"
【讨论】:
您可以使用this(从Vec<u32> 到Vec<u8>,反之亦然):
extern crate byteorder;
use byteorder::{ByteOrder, LittleEndian, WriteBytesExt};
fn main() {
let v32: Vec<u32> = vec![1, 2, 4];
let mut v8: Vec<u8> = Vec::new();
for n in v32 {
v8.write_u32::<LittleEndian>(n).unwrap();
}
println!("{:?}", v8); // [1, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0]
let mut result: Vec<u32> = Vec::new();
for i in (0..v8.len()).step_by(4) {
result.push(LittleEndian::read_u32(&v8[i..]));
}
println!("{:?}", result); // [1, 2, 4]
}
【讨论】: