Преобразование между extprim :: u128 :: u128 и примитивом u128 в Rust? - PullRequest
0 голосов
/ 08 ноября 2018

Я работаю со старым модулем Rust, который использует extprim ящик для предоставления типа u128 .

Я пытаюсь использовать это с более новым ящиком, который использует примитивный тип Rust u128 (доступен начиная с Rust 1.26).

Какой эффективный способ преобразования между этими двумя типами?

1 Ответ

0 голосов
/ 08 ноября 2018

Обновление:

Когда ваша версия rustc больше 1.26.0 , реализована черта From *, и вы можете легко использовать into соответственно from.

Более низкая версия, чем та, смотри ниже.


Как примечание: «Самый эффективный способ» очень субъективен.

Я бы использовал методы low64() и high64() для создания ржавчины u128.

extern crate extprim; // 1.6.0

use extprim::u128;

fn main() {
    let number = u128::u128::from_parts(6_692_605_942, 14_083_847_773_837_265_618);
    println!("{:?}", number);

    // going forth    
    let real_number = u128::from(number.high64()) << 64 | u128::from(number.low64());
    println!("{:?}", number);
    assert_eq!(number.to_string(), real_number.to_string());

    // and back
    let old_number = u128::u128::from_parts((real_number >> 64) as u64, (real_number) as u64);
    assert_eq!(number, old_number);
}

( детская площадка )

Поскольку вы не можете сравнивать оба напрямую, я использовал функцию to_string(), чтобы преобразовать их в строку и сравнить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...