计算两个原始指针之间的距离

Jan*_*dec 6 ffi rust

某些C接口返回指向缓冲区末尾的指针.那么我需要将范围转换为切片.但切片只能从指针和计数中创建.那我怎么得到数.

end - start简单地给了我,error: binary operation `-` cannot be applied to type `*mut i8`并且std::ptr::PtrExt只有offset从偏移计算结束的方法,而不是反向操作.

Chr*_*gan 8

可以将原始指针强制转换为usize; 然后你可以对那些进行减法.

end as usize - start as usize
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于 x : *mut T,y = x.offset(z),则 (y as usize - x as usize) == z * size_of::<T>() 而不是完全等于 z。 (2认同)

dav*_*idg 7

从 1.47.0(2020 年 10 月)开始,Rust 有了offset_from指针类型的方法,允许你写:

let offset: isize = end.offset_from(start);
Run Code Online (Sandbox Code Playgroud)

获取从startto的偏移量end