【问题标题】:How to convert vector of integers to and from bytes? [duplicate]如何将整数向量转换为字节? [复制]
【发布时间】: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


    【解决方案1】:

    也许你正在寻找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"
    

    【讨论】:

      【解决方案2】:

      您可以使用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]
      }
      

      【讨论】:

        猜你喜欢
        • 2013-07-23
        • 2018-12-15
        • 2020-10-24
        • 2013-09-27
        • 2019-09-21
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 2013-11-17
        相关资源
        最近更新 更多