相关疑难解决方法(0)

如何在Rust中将切片作为数组?

我有一个未知大小的数组,我想获得该数组的一部分并将其转换为静态大小的数组:

fn pop(barry: &[u8]) -> [u8; 3] {
    barry[0..3] // mismatched types: expected `[u8, ..3]` but found `&[u8]`
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

arrays rust

36
推荐指数
5
解决办法
2万
查看次数

如何将一片字节(&[u8])的缓冲区转换为整数?

我正在从文件中读取原始数据,我想将其转换为整数:

fn main() {
    let buf: &[u8] = &[0, 0, 0, 1];
    let num = slice_to_i8(buf);
    println!("1 == {}", num);
}

pub fn slice_to_i8(buf: &[u8]) -> i32 {
    unimplemented!("what should I do here?")
}
Run Code Online (Sandbox Code Playgroud)

我会在C中进行类型转换,但是我在Rust中做什么?

arrays casting slice rust

15
推荐指数
2
解决办法
9349
查看次数

Rust 将 &[u8] 转换为 [u8; 尺寸]

如果我有一个 type 变量&[u8],有没有办法将其转换为[u8; SIZE]SIZE 是某个固定常量的类型?

arrays slice rust

6
推荐指数
0
解决办法
2936
查看次数

如何将 GenericArray<T, ?> 转换为相同长度的数组?

我正在计算给定数据的 SHA256:

let hashvalue = sha2::Sha256::digest(&data);
Run Code Online (Sandbox Code Playgroud)

计算后,我想将此值放入结构的字段中:

let x = Hash { value: hashvalue };
Run Code Online (Sandbox Code Playgroud)

但是,Hash结构需要 value 的类型[u8; 32],而我的hashvalue变量是 type GenericArray<u8, ?>。我怎样才能转换hashvalue成正确的类型?我尝试使用as [u8; 32]arr!但没有用。

arrays type-conversion rust

5
推荐指数
2
解决办法
1375
查看次数

切片上的模式匹配

我做了这样的事情,它有效:

let s = " \"".as_bytes();
let (space, quote) = (s[0], s[1]);
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情

&[space, quote] = " \"".as_bytes();
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

let s = " \"".as_bytes();
let (space, quote) = (s[0], s[1]);
Run Code Online (Sandbox Code Playgroud)

有没有可能做类似的事情?

matching rust

4
推荐指数
1
解决办法
2722
查看次数

为什么我不能使用切片模式来过滤 Window 迭代器?

我有一个数字向量,并使用该windows(2)方法创建一个迭代器,为我提供相邻对。例如,向量[1, 2, 3]被变换为[1, 2], [2, 3]。我想使用该find方法来查找满足特定条件的切片:

fn step(g: u64) -> Option<(u64, u64)> {
    let prime_list: Vec<u64> = vec![2, 3, 5, 7]; //For example
    if prime_list.len() < 2 {
        return None;
    }
    let res = prime_list.windows(2).find(|&&[a, b]| b - a == g)?;
    //...
    None
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

fn step(g: u64) -> Option<(u64, u64)> {
    let prime_list: Vec<u64> = vec![2, 3, 5, 7]; //For example
    if prime_list.len() < 2 {
        return None;
    }
    let res …
Run Code Online (Sandbox Code Playgroud)

closures rust

3
推荐指数
1
解决办法
1346
查看次数

如何在编译时检查切片是否具有特定大小?

我想在编译时检查实现中使用的切片是否From具有特定大小。

游乐场

#[derive(Debug)]
struct Pixel {
    r: u8,
    g: u8,
    b: u8,
}

impl From<&[u8]> for Pixel {
    fn from(arr: &[u8]) -> Pixel {
        Pixel {
            r: arr[0],
            g: arr[1],
            b: arr[2],
        }
    }
}

fn main() {
    println!("Hello, world!");

    let arr: [u8; 9] = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    let pixels: Vec<Pixel> = arr.chunks_exact(3).map(Pixel::from).collect();
    println!("{:.?}", pixels);
}
Run Code Online (Sandbox Code Playgroud)

这并不像我想要的那么具体。我想尽可能清楚地检查arr传递给is 3 个元素(在编译时)。Pixel::from<&[u8]>()

想到了assert!(arr.len()==3),但这在运行时检查。

所以我想也许我可以通过( Playground )进行转换:

impl From<[u8; …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
690
查看次数

标签 统计

rust ×7

arrays ×4

slice ×2

casting ×1

closures ×1

matching ×1

type-conversion ×1