Я пишу код, который занимает 64-байтовые блоки, и я хочу применить этот размер на уровне типа:
fn f(buf: &[u8; 64]) { ... }
Однако данные поступают как срез &[u8]
. Итак, я хотел бы иметь возможность взять подпространства этого и преобразовать в &[u8; 64]
. Оказывается, что работает следующее преобразование:
let buf = (0..32).collect::<Vec<u8>>();
let z: &[u8; 32] = &(&buf[..]).try_into().unwrap();
Но следующее не работает:
let buf = (0..64).collect::<Vec<u8>>();
let z: &[u8; 64] = &(&buf[..]).try_into().unwrap();
Разница составляет от 0 до 32 включительно, преобразование работает, но недля размеров выше 32. Что можно сделать, чтобы включить преобразование &[u8]
-> &[u8; 64]
без копирования данных вручную?