首页 > 解决方案 > 在 Rust 中强制转换整数数组

问题描述

我有一个u8s 数组,我想在不分配任何额外内存的情况下将其变成一个(按比例较小的)u32s 数组:这似乎应该很容易(并且安全),但我找不到办法做到这一点安全(我想我可以使用 来做到这一点transmute,但显然它在引擎盖下使用 memcpy 并且我不希望那样)。

如果这是一个 XY 问题,我在这里真正想做的是从字符设备文件中读取并解释我返回的原始数据。我这样做如下:

let mut device_file = File::open(device_path)?;
device_file.seek(SeekFrom::Start(0x3200))?;

let mut buf = [0; 0x28 * 4];
let n = device_file.read(&mut buf[..])?;

然后我想在一个字(32 位)级别上读取这些数据。我可以访问四个字节切片并将它们转换为 a u32,但我宁愿能够将数组重新解释为u32长度为 s 的数组0x28

在 Rust 中有没有一种惯用的方法来做到这一点?我是这门语言的新手,这在 C 语言中是微不足道的,但也许有更好的方法来思考 Rust 中的问题?

我很欣赏这里存在字节序问题,但如果我想要的字节序转换与目标架构匹配,这应该是一个空操作。

标签: arraysrustcastingtype-safety

解决方案


推荐阅读