如何轻松地将非 mut &[u8] 复制到 &mut [u8]
How to easily copy a non-mut &[u8] into to a &mut [u8]
我想对 &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 切片?我应该在问号处写什么?
我会用 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
),因为输入是不可变的。
您可以利用二进制文字在编译时知道其大小这一事实。因此,您可以取消引用它并将其存储在堆栈中。任何 let 绑定也可以是可变的 let 绑定。
let mut input: [u8; 6] = *b"abcdef";
有关完整的示例,请参阅 PlayPen
请注意,没有理由指定类型,我只是为了清楚起见才展示它。
我想对 &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 切片?我应该在问号处写什么?
我会用 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
),因为输入是不可变的。
您可以利用二进制文字在编译时知道其大小这一事实。因此,您可以取消引用它并将其存储在堆栈中。任何 let 绑定也可以是可变的 let 绑定。
let mut input: [u8; 6] = *b"abcdef";
有关完整的示例,请参阅 PlayPen
请注意,没有理由指定类型,我只是为了清楚起见才展示它。