使用指针转换来更改内存中数据的“类型”

时间:2016-06-25 20:22:28

标签: rust idioms

这个问题是关于惯用的Rust。

假设我有一个文件,我想从中读取一定数量的字节:

use std::io::prelude::*;
use std::fs::File;

let mut f = File::open("foo.txt").unwrap();
let mut buffer: [u8;54] = [0; 54];
f.read_exact(&mut buffer).unwrap();

现在我知道偏移量14的字节包含一个32位整数(不用担心字节顺序)。

我一直在读取整数,就像我在C / C ++中那样:通过获取指向我想要的第一个字节的指针,然后将其转换为我想要的整数类型:

let ptr_to_first_byte = &buffer[14] as *const u8;
let ptr_to_int = ptr_to_first_byte as *const u32;

或者,一气呵成:

let my_int_ptr: *const u32 = (&buffer[14] as *const u8) as *const u32;

现在要访问整数,我可以取消引用指针:

let my_int: u32;
unsafe {
    my_int = *ptr_to_int;
}

我很好奇,如果这是在Rust中以惯用方式执行此操作的方法。有没有办法在不使用不安全的情况下访问整数值?

0 个答案:

没有答案