Как использовать GenericArray? - PullRequest
       0

Как использовать GenericArray?

2 голосов
/ 21 февраля 2020

В приведенном ниже коде 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);
}

1 Ответ

1 голос
/ 21 февраля 2020

aes::block_cipher_trait::generic_array - это просто копия ящика generic_array, так что стоит ознакомиться с документацией там.

Второй параметр типа в GenericArray<T, N> представляет в некотором смысле длина GenericArray. generic_array по умолчанию использует типы из ящика typenum (хотя, приложив некоторые усилия, вы можете предоставить свои собственные типы - вам просто нужно реализовать для них необходимые черты).

Во многом похоже на то, как aes предоставляет generic_array в качестве публичной c зависимости, generic_array имеет копию typenum в своем дереве, поэтому вы можете использовать его типы следующим образом:

fn main() {
    use aes::block_cipher_trait::generic_array::{typenum::U16, 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<_, U16> = GenericArray::clone_from_slice(&b[0..16]);

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

(детская площадка. Обратите внимание, что я использовал generic_array напрямую. На детской площадке нет aes ящика.)

Здесь мы использовали typenum::U16, так как нам нужен массив длины 16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...