4

我想对 &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 切片?问号的地方应该放什么?

4

2 回答 2

9

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

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

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

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

于 2015-06-26T10:56:34.387 回答
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),因为输入是不可变的。

于 2015-06-26T10:48:47.563 回答