gpt4 book ai didi

rust - 无法在 u8 数组 : no method found for type in the current scope 上使用 byteorder crate 中的方法

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

我正在尝试使用 byteorder crate 提供的特性:

extern crate byteorder;

use byteorder::{LittleEndian, ReadBytesExt};

fn main() {
let mut myArray = [0u8; 4];
myArray = [00000000, 01010101, 00100100, 11011011];

let result = myArray.read_u32::<LittleEndian>();

println!("{}", result);
}

我收到一个错误:

error[E0599]: no method named `read_u32` found for type `[u8; 4]` in the current scope
--> src/main.rs:10:26
|
10 | let result = myArray.read_u32::<LittleEndian>();
| ^^^^^^^^
|
= note: the method `read_u32` exists but the following trait bounds were not satisfied:
`[u8; 4] : byteorder::ReadBytesExt`
`[u8] : byteorder::ReadBytesExt`

我已经通读了几遍关于 traits 的书章,但不明白为什么这里不满足 trait bound。

最佳答案

[u8][u8; 4] 实现 ReadBytesExt .如图in the documentation , 你可以使用 std::io::Cursor:

let my_array = [0b00000000,0b01010101,0b00100100,0b11011011];
let mut cursor = Cursor::new(my_array);

let result = cursor.read_u32::<LittleEndian>();

println!("{:?}", result);

Playground

任何实现 Read 的类型可以在这里使用,因为 ReadBytesExt is implemented as :

impl<R: io::Read + ?Sized> ReadBytesExt for R {}

因为 &[u8] 实现了 Read 你可以将它简化为

(&my_array[..]).read_u32::<LittleEndian>();

甚至直接使用 LittleEndian 特性:

LittleEndian::read_u32(&my_array);

Playground :(&my_array) , LittleEndian


您的代码中还有其他一些错误:

  • [00000000,01010101,00100100,11011011] 将换行。使用 binary literal instead : [0b0000_0000,0b0101_0101,0b0010_0100,0b1101_1011]
  • 您应该使用 _ 使长数字更具可读性
  • 变量应该在 snake_case 中。使用 my_array 而不是 myArray
  • 您在代码中进行了不必要的赋值。使用 let my_array = [0b0000...

另见:

关于rust - 无法在 u8 数组 : no method found for type in the current scope 上使用 byteorder crate 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010139/

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