这个问题是关于惯用的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中以惯用方式执行此操作的方法。有没有办法在不使用不安全的情况下访问整数值?