numbers - Rust 有办法将几个字节转换为数字吗?

标签 numbers type-conversion rust

<分区>

并将数字转换为字节数组?

我想避免使用transmute,但最重要的是要达到最佳性能。

最佳答案

u32 是 4 个字节,您可以使用std::mem::transmute 来解释[ u8; 4] 作为 u32 但是:

  • 注意对齐
  • 注意字节顺序

无依赖性解决方案就是简单地执行数学运算,遵循 Rob Pike's steps :

fn as_u32_be(array: &[u8; 4]) -> u32 {
    ((array[0] as u32) << 24) +
    ((array[1] as u32) << 16) +
    ((array[2] as u32) <<  8) +
    ((array[3] as u32) <<  0)
}

fn as_u32_le(array: &[u8; 4]) -> u32 {
    ((array[0] as u32) <<  0) +
    ((array[1] as u32) <<  8) +
    ((array[2] as u32) << 16) +
    ((array[3] as u32) << 24)
}

它编译成相当高效的代码。

如果依赖项是一个选项,则使用 byteorder crate 更简单。

关于numbers - Rust 有办法将几个字节转换为数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669427/

相关文章:

python - 将数组的字符串表示形式转换为 python 中的实际数组

random - 特征界限不满足库中的错误

rust - 类型必须满足静态生命周期

rust - 特征 std::ops::Try 没有为 impl 实现

python - 如何找到整数 1,2,3 加起来等于 n 的方式数?

python - 使用数字列表计算最接近 X 的总和

type-conversion - C#中的类型转换

字符串到整数 Smalltalk

mysql - 如何将数字的每个数字分成不同的行

string - 如何将 f64 转换为 String 并解析回 f64?