【问题标题】:Is there a meaningful difference between u8::from_be_bytes and u8::from_le_bytes?u8::from_be_bytes 和 u8::from_le_bytes 之间是否存在有意义的区别?
【发布时间】:2022-01-31 15:23:12
【问题描述】:

由于大端和小端与字节顺序有关,并且由于一个u8 是一个字节,所以u8::from_be_bytesu8::from_le_bytes 不总是具有相同的行为吗?

【问题讨论】:

  • They always have the same behavior. 您可以实际观察到的字节序是在字节级别定义的,并且只有一种方法可以对单个字节进行排序。
  • 正如@user4815162342 所说,它们具有相同的行为。两者存在的原因是因为它们是 generated by a macro,它也用于 LE/BE 区别有意义的较大整数类型。
  • ..le_bytes 显然是法文版

标签: rust endianness


【解决方案1】:

是的,它们具有相同的行为。提供u8 上的面向字节的函数(swap_bytes(from|to)_[bln]e(_bytes)?)是为了与较大的整数保持一致,即使它们的实现很简单。

除其他外,这使得编写对所有大小的整数都正确的宏代码变得更容易,而不必特殊情况下u8

【讨论】:

【解决方案2】:

在字节级别上没有区别。为了更好地理解 Big-endian 与 Little-endian 的区别,请考虑以下几点:

可以看出,示例中有三个字节,每个字节的位具有不同的颜色。请注意每个字节中的位在 BE 和 LE 中看起来完全相同。

顺便说一句,这与语言无关。

关于 u8 上运行的 Rust 函数,Trent 解释得很好。我的回答更侧重于 BE/LE 的一般工作方式。

【讨论】:

  • 与语言无关,但假设为 8 位字节。现在相当普遍......
  • 那就是八位字节
猜你喜欢
  • 2023-02-03
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 2014-12-21
相关资源
最近更新 更多