让我们假设我有以下切片(代码不编译):
struct Data {
data: Vec<u8>
}
impl Data {
pub fn parse_ipv4(&self) -> Ipv4Addr {
let octets: [u8; 4] = self.data[2..6]; // this does not compile
Some(Ipv4Addr::from(octets));
}
}
问题是编译器无法推断数据片的
usize
,因此如何明确告诉它新数组的长度?
关键是TryTo
。看起来你应该返回选项
use std::net::Ipv4Addr;
use std::convert::TryInto;
struct Data {
data: Vec<u8>
}
impl Data {
pub fn parse_ipv4(&self) -> Option<Ipv4Addr> {
let octets: Result<[u8; 4], _> = self.data[2..6].try_into();
octets.map(Ipv4Addr::from).ok()
}
}
我有一个包含原始二进制数据的文件,我想把它加载到一个4字节长的字数组中。 可以通过在编译时包含文件的内容来执行: 然后,我可以使用将其转换为字的数组。新数组的长度显然应该是原始字节数组的1/4。 正如你在上面看到的,我必须对输入和输出数组的长度进行硬编码。然而,当试图避免硬编码这些数字时,它不起作用: 似乎在运行时被调用,由于在Rust中无法分配动态数组,因此会产生错误。然而,理论上,应该有一种方
明确编译器警告和错误 编译器是一个机器人,它会标记你代码中被 Clang 规则定义为错误的地方。但是,你总是比 Clang 更聪明。通常,你会发现一些讨厌的代码会导致这个问题,但是暂时却解决不了。你可以这样明确一个错误: - (NSInteger)divide:(NSInteger)dividend by:(NSInteger)divisor { #error Whoa, buddy, y
我知道切片就像fatptr:。将数组切片为切片时: 数组没有像Vec这样的长度字段 我知道可以获取slice的长度,因为有一个长度字段。当数组转换为切片时,Rust如何知道长度字段?
问题内容: 我有一个快速的问题。我在java中有一个整数数组,需要它的长度在整个类中变化。具体来说,在某些情况下,我需要将其增加一。我这样尝试过。 我会在需要时增加整数变量numberOfSBG,但我认为这不起作用。还有其他办法吗? 问题答案: 我建议您使用ArrayList,因为您不必担心长度。创建后,您将无法修改数组大小: 数组是一个包含固定数量的单一类型值的容器对象。创建数组时将确定数组的长
如图所示,我在主函数之前定义了哈希函数,现在他却回答我“hash”不明确,我不理解