u8::from_be_bytes 和 u8::from_le_bytes 之间有什么有意义的区别吗?
Is there a meaningful difference between u8::from_be_bytes and u8::from_le_bytes?
既然big-endian和little-endian与字节顺序有关,又因为一个u8
是一个字节,所以u8::from_be_bytes
和u8::from_le_bytes
不总是一样的吗行为?
在 byte-level 上没有区别。为了更好地理解 Big-endian 与 Little-endian 的区别,请考虑以下内容:
可以看出,示例中有三个字节,每个字节都有不同的颜色。请注意每个字节中的位在 BE 和 LE 中看起来完全相同。
那是 language-agnostic 顺便说一句。
至于在[=10=上运行的Rust函数,Trent解释得很好。我的回答更侧重于 BE/LE 通常如何工作的部分。
是的,他们有相同的行为。提供 u8
上的 byte-oriented 函数(swap_bytes
和 (from|to)_[bln]e(_bytes)?
)是为了与较大的整数保持一致,即使它们的实现很简单。
除其他外,这使得编写适用于所有整数大小的宏代码变得更加容易,而不必 special-case u8
.
既然big-endian和little-endian与字节顺序有关,又因为一个u8
是一个字节,所以u8::from_be_bytes
和u8::from_le_bytes
不总是一样的吗行为?
在 byte-level 上没有区别。为了更好地理解 Big-endian 与 Little-endian 的区别,请考虑以下内容:
可以看出,示例中有三个字节,每个字节都有不同的颜色。请注意每个字节中的位在 BE 和 LE 中看起来完全相同。
那是 language-agnostic 顺便说一句。
至于在[=10=上运行的Rust函数,Trent解释得很好。我的回答更侧重于 BE/LE 通常如何工作的部分。
是的,他们有相同的行为。提供 u8
上的 byte-oriented 函数(swap_bytes
和 (from|to)_[bln]e(_bytes)?
)是为了与较大的整数保持一致,即使它们的实现很简单。
除其他外,这使得编写适用于所有整数大小的宏代码变得更加容易,而不必 special-case u8
.