如何轻松地将非mut&[u8]复制到&mut [u8]

Pet*_*mit 4 copy slice mutability rust

我想对&mut [u8]做一些操作.

在我的测试代码中,我有:

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

在这种情况下,如何轻松获得可变的u8切片?我该怎么把问号放在哪里?

oli*_*obk 9

您可以使用二进制文字在编译时知道其大小的事实.因此,您可以取消引用它并将其存储在堆栈中.任何let绑定也可以是一个可变的let绑定.

let mut input: [u8; 6] = *b"abcdef";
Run Code Online (Sandbox Code Playgroud)

请参阅PlayPen以获得完整的示例

请注意,没有理由指定类型,我只是为了清楚而显示它.


Vee*_*rac 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);
}
Run Code Online (Sandbox Code Playgroud)

显然,这会创建一个副本(通过中间件Vec),因为输入是不可变的.