【发布时间】:2015-05-07 17:24:07
【问题描述】:
一些 C 接口返回指向缓冲区末尾的指针。那么我需要将范围转换为切片。但是切片只能从指针和计数创建。那么我如何获得计数。
写end - start 只是给我error: binary operation `-` cannot be applied to type `*mut i8` 和std::ptr::PtrExt 只有offset 方法从偏移量计算结束,但没有逆运算。
【问题讨论】:
一些 C 接口返回指向缓冲区末尾的指针。那么我需要将范围转换为切片。但是切片只能从指针和计数创建。那么我如何获得计数。
写end - start 只是给我error: binary operation `-` cannot be applied to type `*mut i8` 和std::ptr::PtrExt 只有offset 方法从偏移量计算结束,但没有逆运算。
【问题讨论】:
原始指针可以转换为usize;然后你可以对这些进行减法。
end as usize - start as usize
【讨论】:
*const T 实现Sub<*const T, Output = isize> 可能不是一个坏主意。
从 1.47.0(2020 年 10 月)开始,Rust 在指针类型上有offset_from 方法,允许你写:
let offset: isize = end.offset_from(start);
获取从start 到end 的偏移量。
【讨论】: