2015-06-26 8 views
4

Я хочу сделать некоторые манипуляции на & mut [u8].Как легко скопировать не-mut и [u8] в a & mut [u8]

В моем коде тестирования у меня есть:

#[test] 
fn test_swap_bytes() { 
    let input: &[u8] = b"abcdef"; 
    let result: &mut[u8] = ?; 
    do_something(result); 
    assert_eq!(b"fedcba", result); 
} 

Как я могу легко получить изменяемый кусочек U8 в этом случае? Что я должен поставить на место вопросительного знака?

ответ

9

Вы можете использовать тот факт, что бинарный литерал знает свой размер во время компиляции. Поэтому вы можете разыменовать его и сохранить в стеке. Любые let binding также могут быть изменчивыми let binding.

let mut input: [u8; 6] = *b"abcdef"; 

См PlayPen для полного рабочего примера

Следует отметить, что нет никаких причин, чтобы указать тип, я просто показал для наглядности.

6

Я хотел бы использовать to_owned():

#[test] 
fn test_swap_bytes() { 
    let input: &[u8] = b"abcdef"; 
    let result: &mut[u8] = &mut input.to_owned(); 
    do_something(result); 
    assert_eq!(b"fedcba", result); 
} 

Очевидно, что это создает копию (через промежуточный Vec), так как вход неизменна.