gpt4 book ai didi

rust - try_into() 在 u8 上使用时中断

转载 作者:行者123 更新时间:2023-12-05 03:43:00 28 4
gpt4 key购买 nike

所以我对这个脚本没有太多的了解,作为一个更大的 ARM 项目的一部分进行编译。这来自主要为 x86 设计的 zksync 库。

我在编译时一直遇到转换错误:

7 |         .try_into()
| ^^^^^^^^ the trait `std::convert::From<std::vec::Vec<u8>>` is not implemented for `[u8; 16]`

我尝试使用 try_from() 作为我的许多搜索推荐的方法,但无法让它运行,因为我对 Rust 还是很陌生,但如果有人能让它工作,我愿意接受。

我正在使用下面的目标和链接器进行编译 -

目标 - arm-unknown-linux-musleabi链接器 - arm-linux-gnueabihf-ld

如果有人可以推荐如何解决这个问题,我很想听听,我在考虑使用 usize 而不是 u64 变量,但不太清楚这是否是我应该尝试下去的兔子洞。

完整代码:

use serde::{Deserialize, Serialize};
use std::convert::TryInto;

/// Defines time range `[valid_from, valid_until]` for which transaction is valid,
/// time format is the same as Ethereum (UNIX timestamp in seconds)
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TimeRange {
pub valid_from: u64,
pub valid_until: u64,
}

impl TimeRange {
pub fn new(valid_from: u64, valid_until: u64) -> Self {
Self {
valid_from,
valid_until,
}
}

pub fn to_be_bytes(&self) -> [u8; 16] {
[
self.valid_from.to_be_bytes(),
self.valid_until.to_be_bytes(),
]
.concat()
.try_into()
.expect("valid_from and valid_until should be u64")
}

pub fn check_correctness(&self) -> bool {
self.valid_from <= self.valid_until
}

pub fn is_valid(&self, block_timestamp: u64) -> bool {
self.valid_from <= block_timestamp && block_timestamp <= self.valid_until
}
}

impl Default for TimeRange {
fn default() -> Self {
Self {
valid_from: 0,
valid_until: u64::max_value(),
}
}
}

最佳答案

您的代码 compiles successfully在当前稳定版本 (v1.51) 上。然而,TryFrom<Vec<_>>对于切片(这是允许您使用 try_into() 的)仅为 added in rust 1.48 ,所以也许你运行的是 1.48 之前的 Rust 版本。如果是这样,更新到 1.48+ 应该可以解决您的问题。

关于rust - try_into() 在 u8 上使用时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67030097/

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