如何使用通用数组?

the*_*uck 8 rust

在下面的 Rust 代码中,我无法将字节数组转换为 GenericArray。编译器告诉我给一个类型“字节”,如 generic_array::GenericArray<u8, N>,但我不知道使用什么作为“N”。

我发现 N 必须是 ArrayLength 类型,并且我被困在这里,因为我没有看到要传递的大小的链接。

fn main() {

    use aes::block_cipher_trait::generic_array::GenericArray;

    let phrase = "Le Rust tu comprendras jeune padawan !";

    println!("my phrase {:?}", &phrase);

    let b = phrase.as_bytes();

    println!("my bytes {:?} len : {}", &b, b.len());

    let bytes = GenericArray::clone_from_slice(&b[0..16]);

    println!("my bytes {:?}", &bytes);
}
Run Code Online (Sandbox Code Playgroud)

SCa*_*lla 10

aes::cipher::generic_array只是crategeneric_array的副本,因此值得仔细阅读那里的文档。

\n

in 中的第二个类型参数GenericArray<T, N>在某种意义上表示 的长度GenericArraygeneric_array默认情况下使用板条箱中的类型typenum(尽管经过一些努力,您可以提供自己的类型 \xe2\x80\x94 您只需要为它们实现必要的特征)。

\n

就像如何aes提供generic_array公共依赖项一样,在其树中generic_array具有 的副本typenum,因此您可以像这样使用其类型:

\n
fn main() {\n    use aes::cipher::generic_array::{typenum::U16, GenericArray};\n\n    let phrase = "Le Rust tu comprendras jeune padawan !";\n\n    println!("my phrase {:?}", &phrase);\n\n    let b = phrase.as_bytes();\n\n    println!("my bytes {:?} len : {}", &b, b.len());\n\n    let bytes: GenericArray<_, U16> = GenericArray::clone_from_slice(&b[0..16]);\n\n    println!("my bytes {:?}", &bytes);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

(游乐场。注意我是generic_array直接用的。游乐场没有箱子aes。)

\n

在这里,我们使用了typenum::U16长度为 16 的数组。

\n