把一个数字转换成字节数组?

我希望避免使用transmute,但最重要的是达到最高性能.

推荐答案

T::from_str_radix个字符串可以转换(你可以 Select 基数,T可以是任何整数类型).

要将整数转换为String,可以使用format!:

format!("{:x}", 42) == "2a"
format!("{:X}", 42) == "2A"

要将整数重新解释为字节,只需使用byte_order crate .


旧答案,我不再建议:

如果你想在u32[u8; 4]之间转换(例如),你可以使用transmute,这就是它的用途.

还要注意,Rust有to_beto_le个函数来处理持久性:

unsafe { std::mem::transmute::<u32, [u8; 4]>(42u32.to_le()) } == [42, 0, 0, 0]
unsafe { std::mem::transmute::<u32, [u8; 4]>(42u32.to_be()) } == [0, 0, 0, 42]
unsafe { std::mem::transmute::<[u8; 4], u32>([0, 0, 0, 42]) }.to_le() == 0x2a000000
unsafe { std::mem::transmute::<[u8; 4], u32>([0, 0, 0, 42]) }.to_be() == 0x0000002a

Rust相关问答推荐

如何使用Match比较 struct 中的值

通过解引用将值移出Box(以及它被脱糖到什么地方)?

防止cargo test 中的竞争条件

同时从不同线程调用DLL的不同函数会出现分段错误或产生STATUS_STACK_BUFFER_OVERRUN

如何向下转换到MyStruct并访问Arc Mutex MyStruct实现的方法?

如何实现Serde::Ser::Error的调试

如何修复&q;无法返回引用函数参数的值在异步规则中返回引用当前函数&q;拥有的数据的值?

rust中的库插件管理器,现在是否可行?

为什么RefCell没有与常规引用相同的作用域?

从管道读取后重置标准输入

这个不安全的 Rust 代码有什么问题,所以它可以在 Windows 上运行,但不能在 Ubuntu 上运行?

根据掩码将 simd 通道设置为 0 的惯用方法?

在 Rust 中忽略 None 值的正确样式

当锁被释放时,将锁包装到作用域中是否会发生变化?

为什么 File::read_to_end 缓冲区容量越大越慢?

如何连接 Rust 中的相邻切片

如何展平以下嵌套的 if let 和 if 语句?

只有一个字符被读入作为词法分析器的输入

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

在 Rust 中退出进程