【问题标题】:Calculate distance between two raw pointers计算两个原始指针之间的距离
【发布时间】:2015-05-07 17:24:07
【问题描述】:

一些 C 接口返回指向缓冲区末尾的指针。那么我需要将范围转换为切片。但是切片只能从指针和计数创建。那么我如何获得计数。

end - start 只是给我error: binary operation `-` cannot be applied to type `*mut i8`std::ptr::PtrExt 只有offset 方法从偏移量计算结束,但没有逆运算。

【问题讨论】:

    标签: rust ffi


    【解决方案1】:

    原始指针可以转换为usize;然后你可以对这些进行减法。

    end as usize - start as usize
    

    【讨论】:

    • 我不认为为其添加方法是正确的做法,但为*const T 实现Sub<*const T, Output = isize> 可能不是一个坏主意。
    • 请注意,对于 x : *mut T, y = x.offset(z), 然后 (y as usize - x as usize) == z * size_of::() 相反正好等于 z。
    【解决方案2】:

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

    let offset: isize = end.offset_from(start);
    

    获取从startend 的偏移量。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 2021-01-14
      • 2010-10-30
      • 1970-01-01
      • 2020-02-12
      • 2019-02-16
      相关资源
      最近更新 更多