当前位置: 首页 > 知识库问答 >
问题:

如何复制或引用字节片?[副本]

易招
2023-03-14

如何从较大的数组中复制或引用字节片?

我只需要读取它们,但我希望指定大小以在编译时捕获错误。

let foo = rand::thread_rng().gen::<[u8; 32]>();
let bar: [u8; 16] = foo[0..16];
let baz: &[u8; 16] = &foo[16..32];

错误是:

error[E0308]: mismatched types
  --> src/main.rs:64:22
   |
64 |     let bar: [u8; 16] = foo[0..16];
   |              --------   ^^^^^^^^^^ expected array `[u8; 16]`, found slice `[u8]`
   |              |
   |              expected due to this
    
error[E0308]: mismatched types
  --> src/main.rs:65:23
   |
65 |     let baz: &[u8; 16] = &foo[16..32];
   |              ---------   ^^^^^^^^^^^^ expected array `[u8; 16]`, found slice `[u8]`
   |              |
   |              expected due to this
   |
   = note: expected reference `&[u8; 16]`
              found reference `&[u8]`

我可以看到foo[0...16]正好是16个字节,而不是一个未知长度的切片[u8]。我如何帮助编译器看到这一点?

共有1个答案

彭修筠
2023-03-14

你的问题不是你不能引用一段字节;这是因为切片不是数组。

您可能需要arrayref板条箱或TryIntotrait。在这个Github问题中,也有一些关于自动执行此操作的讨论。

 类似资料:
  • 问题内容: 有人可以向我解释一下吗?这对我来说毫无意义。 我将字典复制到另一个字典中,然后编辑第二个字典,并且两者都已更改。为什么会这样呢? 问题答案: 分配时,你并没有复制该文件的副本dict1,结果dict2只是该文件的另一个名称dict1。 要复制字典等可变类型,请使用的模块。

  • 在Go中,复制切片是标准费用,如下所示: 在《铁锈》中,我找不到类似的替换方法。我想到的东西是这样的: 不幸的是,我遇到了无法解决的编译错误: 如何设置?有没有更好的复制切片的方法?

  • 问题内容: 我只是想知道哪种方法更好(或者我是否缺少更好的方法)。我试图确定一个单词的第一个字母和最后一个字母是否相同,并且有两个明显的解决方案。 要么 据我了解,第一个只是提取字符串的片段并进行字符串比较,而第二个则是从任一端提取字符并将其作为字节进行比较。 我很好奇两者之间是否存在性能差异,并且是否有任何“可取的”方式来做到这一点? 问题答案: 如果用字母表示您的符文,请使用: 如果您的意思是

  • 我的问题是,当我上传一个文件超过我在脚本中设置的限制(5 MB)时,它会在网站顶部显示此警告: 警告:第0行未知中32485176字节的POST内容长度超过了20971520字节的限制 例如,在这里,我上传了一个文件超过(30 MB),但当我上传一个文件超过(5 MB),小于30(或没有那么大)它不显示警告,只显示我想要的代码错误: 我正在localhost,这个错误每次都出现,我知道如何通过修改

  • 我有一个实体用户: 和实体课程 我需要制作 user1 课程的副本(深度副本),并将此副本添加到另一个用户 2。最后,我需要用户1有课程,用户2有课程的副本。

  • 当汇总需要一个ToIntFunction时,以下方法引用如何有效?我这样问是因为GetCarries的签名与applyAsInt的签名不匹配