Невозможно использовать методы из ящика метеоролога в массиве u8: не найден метод для типа в текущей области - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь использовать черту, предоставленную ящиком метеоролога:

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`

Я пару раз прочитал главу книги о чертах и ​​не могу понять, почему граница черт здесь не выполняется.

1 Ответ

0 голосов
/ 24 июня 2018

Ни [u8], ни [u8; 4] не реализует ReadBytesExt. Как показано в документации , вы можете использовать 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);

Детская площадка

Здесь можно использовать любой тип, который реализует Read, поскольку ReadBytesExt реализован следующим образом ( ссылка на источник ):

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

Поскольку &[u8] реализует Read, вы можете упростить его до

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

или даже использовать черту LittleEndian напрямую:

LittleEndian::read_u32(&my_array);

Детские площадки: (&my_array), LittleEndian


В вашем коде есть другие ошибки:

  • [00000000,01010101,00100100,11011011] завернут. Используйте двоичный литерал вместо : [0b0000_0000,0b0101_0101,0b0010_0100,0b1101_1011]
  • Вы должны использовать _, чтобы сделать длинные цифры более читабельными
  • переменные должны быть в snake_case. Используйте my_array вместо myArray
  • Вы делаете ненужное назначение в коде. Используйте let my_array = [0b0000...

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...