#rust #cryptography
Вопрос:
BigUint::from(24u32)
Я понимаю, что это связано с большим целым числом без знака, поскольку оно является частью модуля криптографии для учета больших чисел. Я не понимаю, что делает эта часть from(24u32)
.
Например, если он используется в этом контексте
let b: BigUint = (BigUint::from(24u32) * amp;n).sqrt() amp;one;
Ответ №1:
Преобразования между типами в Rust определяются From
чертой , определяющей функцию from
, которая Foo::from (bar)
преобразует значение bar
в тип Foo
. В вашем случае вы, следовательно , преобразуетесь 24u32
в тип BigUint
, но что это такое 24u32
?
Целочисленные литералы в Rust могут использовать суффикс для указания их фактического типа. Если бы вы написали просто 24
, это могло бы быть , например, an i32
, a u8
или a u32
. Большую часть времени компилятор может определить фактический тип по тому, как используется значение, а когда это невозможно, по умолчанию i32
используется значение . Но в вашем случае это не сработает: нет BigUint::from<i32>
, но есть функции преобразования для всех обычных типов без знака: u8
, u16
, u32
, u64
и u128
, поэтому компилятор не знает, какой из них использовать. Добавление u32
суффикса уточняет тип, так 24u32
же как и значение 24
с типом u32
, позволяя компилятору понять, что вы хотите BigUint::from<u32> (24)
.
Ответ №2:
BigUint
Структура реализует <a rel=»noreferrer noopener nofollow» href=»https://docs.rs/num-bigint/0.4.0/num_bigint/struct.BigUint.html#impl-From» rel=»nofollow noreferrer»> From<u32>
признак, что означает, что она будет реализовывать from(u32)
функцию.
Реализации From<_>
признака используются для выполнения преобразования значений, которое будет потреблять исходные входные данные. В вашем примере BigUint
структура строится из 24u32
числа.