Следующий код 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`
Есть очень похожие вопросы о переполнении стека, которые я рассмотрел, но мои немного отличаются от тех, потому что я пытаюсь прочитать u16
из фрагмента. На практике я не уверен, почему мой пример существенно отличается, я уверен, что упускаю что-то очевидное.
В частности, мне не ясно, как то, что у меня есть, существенно отличается от того, что в принятом здесь ответе:
Как я могу преобразовать буфер фрагмента байтов (& [u8]) в целое число?
Разве я не имею &[u8]
, когда я говорю &buf[0..1]
?