Rust 比较字节数组和向量
我试图将读取的Rust 比较字节数组和向量,rust,Rust,我试图将读取的Vec字节与读入Vec的字节进行比较,但我无法将两侧的类型对齐。这是我的代码(): 您可以看到我在使用let绑定强制执行Vec类型并比较它们之前,每次尝试比较它们都失败了 第一个,assert\u eq!(byte_str,byte_vec),失败原因: `<std macros>:5:8: 5:33 error: the trait `core::cmp::PartialEq<collections::vec::Vec<u8>>` is not
Vec
字节与读入Vec
的字节进行比较,但我无法将两侧的类型对齐。这是我的代码():
您可以看到我在使用let
绑定强制执行Vec
类型并比较它们之前,每次尝试比较它们都失败了
第一个,assert\u eq!(byte_str,byte_vec)
,失败原因:
`<std macros>:5:8: 5:33 error: the trait `core::cmp::PartialEq<collections::vec::Vec<u8>>` is not implemented for the type `&[u8; 21]`
有没有一个更简单的方法可以做到这一点,我错过了
更新:在写问题时,我确实找到了答案,但还是有点笨重:
assert_eq!(byte_str, AsRef::<[u8]>::as_ref(&byte_vec));
但这不会:
assert_eq!(b"012345678901234567890123456789012", &*byte_vec);
因此,您必须在其上调用as_ref()
,以使其成为一个切片,这些特性是为其实现的:
assert_eq!(b"012345678901234567890123456789012".as_ref(), &*byte_vec);
您可以编写以下内容:
assert_eq!(byte_str, &*byte_vec);
&*
可能看起来像一个no-op,但实际上,它在这里起作用,并改变了一元*
运算符的含义<因此,code>&*byte_vec相当于&*(byte_vec.deref())
,或者仅相当于byte_vec.deref()
assert_eq!(b"012345678901234567890123456789012", &*byte_vec);
assert_eq!(b"012345678901234567890123456789012".as_ref(), &*byte_vec);
assert_eq!(byte_str, &*byte_vec);