gpt4 book ai didi

arrays - 为什么在使用 ReadBytesExt 从 byte slice 段中读取整数时会出现错误 "trait bounds were not satisfied"?

转载 作者:行者123 更新时间:2023-11-29 08:23:23 25 4
gpt4 key购买 nike

以下 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>(); }

来自编译器的消息:

error[E0599]: no method named `read_u16` found for type `[u8]` in the current scope           
--> src/main.rs:18:25
|
18 | let id = &buf[0..1].read_u16::<LittleEndian>();
| ^^^^^^^^
|
= note: the method `read_u16` exists but the following trait bounds were not satisfied:
`[u8] : byteorder::ReadBytesExt`

Stack Overflow 上有非常相似的问题,我已经看过,但我的问题与那些问题略有不同,因为我正在尝试从切片中读取 u16。在实践中,我不确定为什么我的示例有本质上的不同,我确信我遗漏了一些明显的东西。

具体来说,我不清楚我得到的内容与此处接受的答案中的内容有何显着不同:

How can I convert a buffer of a slice of bytes (&[u8]) to an integer?

当我说 &buf[0..1] 时,我不是也有 &[u8] 吗?

最佳答案

您的代码调用 read_u16()数组 而不是切片 上。您可能打算在 &buf[0..1] 上调用该方法, 但由于运算符优先级,您实际上在 buf[0..1] 上调用它.这可以通过简单地添加一对括号来解决:

let id = (&buf[0..1]).read_u16::<LittleEndian>();

您的原始代码被解释为 &(buf[0..1].read_u16::<LittleEndian>()) ,这就是编译器提示 ReadBytesExt 的原因[u8] 未实现特征.

关于arrays - 为什么在使用 ReadBytesExt 从 byte slice 段中读取整数时会出现错误 "trait bounds were not satisfied"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com