gpt4 book ai didi

arrays - 从大小可变的数组构造一个结构

转载 作者:行者123 更新时间:2023-12-03 11:42:50 24 4
gpt4 key购买 nike

我想从这样的数组构建一个结构:

use std::convert::TryFrom;

impl TryFrom for Chunk {
type Error = Error;

fn try_from<&[u8]>(bytes: &[u8]) -> Result<Self> {
// construct
}
}
需要将数组切成几段,然后将这些段转换为所需的数据类型,并用于初始化结构。
但是我遇到了这个问题:数组的可变成员的大小作为struct bytes[0..4]的前四个字节给出。但是当我尝试访问这四个字节时,我得到的错误是在编译时不知道数组的大小,因此Rust不允许我对其进行索引。
做我想完成的正确的,鲁斯塔斯式的方法是什么?如何在编译时索引一个数组大小未知的索引?

最佳答案

需要明确的是,bytes不是array,而是slice。这些在Rust中是不同的:在编译时,数组的大小是固定的,而切片则不是。
有许多分割切片的方法。如果块大小相同,则 chunks 是可行的方法。它返回固定大小的块上的迭代器,作为子切片。
如果它们没有固定大小,则另一个选择是调用 split_at ,它将从源构造两个新的切片,并在提供的索引处进行分割。您将需要确保分割索引有效,否则方法会出现紧急情况。
因此,要从切片中拆分出前四个字节,您需要执行以下操作:

// Split into two chunks, of size 4 and (bytes.len() - 4)
let (head, remainder) = bytes.split_at(4);

// convert `head` to whatever type you need

// Continue, for example parsing out a 2-byte type.
let (head, remainder) = remainder.split_at(2);

关于arrays - 从大小可变的数组构造一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63862600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com