arrays - 在 Rust 中强制转换整数数组
问题描述
我有一个u8
s 数组,我想在不分配任何额外内存的情况下将其变成一个(按比例较小的)u32
s 数组:这似乎应该很容易(并且安全),但我找不到办法做到这一点安全(我想我可以使用 来做到这一点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 中的问题?
我很欣赏这里存在字节序问题,但如果我想要的字节序转换与目标架构匹配,这应该是一个空操作。
解决方案
推荐阅读
- reactjs - 重新加载 React Router 应用程序时出现 404 错误
- ruby-on-rails - 在 Rails 5 中创建嵌套资源
- android - 如何判断变量是否在 kotlin 中初始化?
- javascript - JavaScript 中的 DOMParser 不提供 XML 元素
- javascript - JavaScript 用元素填充页面后,如何使用 Jsoup 从 URL 中提取 DOM?
- angular - 从代码中以特定格式日期显示日期?
- php - 带有 Slim 框架的 Nginx - 下载 php 文件
- xamarin - Xamarin.Android - java.lang.UnsatisfiedLinkError
- javascript - MongoDB驱动程序findOneAndUpdate方法,如何返回两个值
- elasticsearch - 如何安装 stackdriver elasticsearch 插件来监控在 GKE 上的 k8s v1.11 内运行的 ES 实例?