如何以字节为单位获取指针偏移?

ide*_*n42 5 rust

虽然Rust中的原始指针有offset方法,但这只会增加指针的大小.如何以字节为单位访问指针?

C中的这样的事情:

var_offset = (typeof(var))((char *)(var) + offset);
Run Code Online (Sandbox Code Playgroud)

Mat*_* M. 8

答案我链接到你以前的问题:

macro_rules! offset_of {
    ($ty:ty, $field:ident) => {
        unsafe { &(*(0 as *const $ty)).$field as *const _ as usize }
    }
}

fn main() {
    let p: *const Baz = 0x1248 as *const _;
    let p2: *const Foo = ((p as usize) - offset_of!(Foo, memberB)) as *const _;
    println!("{:p}", p2);
}
Run Code Online (Sandbox Code Playgroud)

我们可以在计算中p2看到指针可以无痛地转换为整数(usize此处),在该整数上执行算术,然后将结果转换回指针.

isize并且usize是通用字节大小的指针类型:)