2015-04-03 3 views
0

Как мне сделать, чтобы работать следующий код:операция минус для ломтиков

let arr: [u8; 3] = [1, 2, 3]; 
let x1: &[u8] = &arr[0..]; 
let x2: &[u8] = &arr[1..]; 
let d: isize = x2 - x1; 

У меня есть два кусочка в один вектор, и я хочу знать разницу между их стартовыми указателями (должна быть 1 в этом примере) ,

ответ

1

Один из подходов заключается в преобразовании указателей на срез содержимого isize и сделать арифметику этих значений:

let arr: [u8; 3] = [1, 2, 3]; 
let x1: &[u8] = &arr[0..]; 
let x2: &[u8] = &arr[1..]; 
let d: isize = x2.as_ptr() as isize - x1.as_ptr() as isize; 
println!("{}", d); 

Но я не уверен, как это будет работать, если адрес не помещается в isize.

+0

* Если адрес не вписывается в 'isize' * => Вы имеете в виду, если адреса подходят в' usize', но не 'isize'? В этом случае вы можете конвертировать в 'usize' вместо этого, хотя получить разницу без недоиспользования будет немного сложнее. –

Смежные вопросы