Jaw*_*ser 4 arrays casting reference slice rust
以下 Rust 代码无法编译。
extern create byteorder;
use byetorder::{LittleEndian, ReadBytesExt};
fn main() {
let buf: [u8; 12] = [
0x00, 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x30,
];
let id = &buf[0..1].read_u16::<LittleEndian>(); }
Run Code Online (Sandbox Code Playgroud)
来自编译器的消息:
extern create byteorder;
use byetorder::{LittleEndian, ReadBytesExt};
fn main() {
let buf: [u8; 12] = [
0x00, 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x30,
];
let id = &buf[0..1].read_u16::<LittleEndian>(); }
Run Code Online (Sandbox Code Playgroud)
u16Stack Overflow 上有非常相似的问题,我已经评论过,但我的问题与那些问题略有不同,因为我试图从切片中读取 a 。在实践中,我不确定为什么我的例子有本质上的不同,我确信我错过了一些明显的东西。
具体来说,我不清楚我所得到的与此处接受的答案中的内容有何显着不同:
&[u8]我说的时候不也有吗&buf[0..1]?
您的代码调用read_u16()array而不是slice。您可能打算在 on 上调用该方法&buf[0..1],但由于运算符优先级,您实际上是在 on 上调用该方法buf[0..1]。只需添加一对括号即可解决此问题:
let id = (&buf[0..1]).read_u16::<LittleEndian>();
Run Code Online (Sandbox Code Playgroud)
您的原始代码被解释为&(buf[0..1].read_u16::<LittleEndian>()),这就是编译器抱怨该ReadBytesExt特征未针对 实现的原因[u8]。
| 归档时间: |
|
| 查看次数: |
4723 次 |
| 最近记录: |