How to get the byte offset between `&str`
but it turns out that
Sub
is not implemented on raw pointers.
You can convert the pointer to a usize
to do math on it:
fn main() {
let source = "hello, world";
let a = &source[1..];
let b = &source[5..];
let diff = b.as_ptr() as usize - a.as_ptr() as usize;
println!("{}", diff);
}
There's also the unstable method offset_from
:
#![feature(ptr_offset_from)]
fn main() {
let source = "hello, world";
let a = &source[1..];
let b = &source[5..];
// I copied this unsafe code from Stack Overflow without
// reading the text that told me how to know if this was safe
let diff = unsafe { b.as_ptr().offset_from(a.as_ptr()) };
println!("{}", diff);
}
Please be sure to read the documentation for this method as it describes under what circumstances it will not cause undefined behavior.