将字节顺序与向量一起使用时需要类型注释

Type annotation needed when use byteorder with vector

我需要构建一个数据包发送到服务器。我为此使用 byteorder 板条箱。我的字段之一包含 usize 数据,因此我使用类型转换将其转换为 i16:

use byteorder::WriteBytesExt;

fn main () {
    let login = "test";
    let packet_length = 30 + (login.len() as i16);
    let mut packet = Vec::new();
    packet.write_u8(0x00);
    packet.write_i16(packet_length);
    packet.append(&mut Vec::from(String::from("game name ").as_bytes_mut()));
    // ... rest code
}

但是我得到一个错误:

packet.write_i16(packet_length);
 |     ^^^^^^^^^ cannot infer type for type parameter `T` declared on the associated function `write_i16`

这是重现的游乐场。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=1e5dd29816a128f7561e06f7c825864d

我不知道应该在哪里添加类型注释,你能帮忙吗?

您需要指定 endianness,或者 BigEndian or LittleEndian:

packet.write_i16::<BigEndian>(packet_length);

BigEndian::write_u32(&mut packet, packet_lentgth);

Playground