2 个稳定版本

1.0.3 2023 年 6 月 13 日

#18#uint

Download history 155/week @ 2024-03-14 221/week @ 2024-03-21 108/week @ 2024-03-28 133/week @ 2024-04-04 237/week @ 2024-04-11 239/week @ 2024-04-18 439/week @ 2024-04-25 715/week @ 2024-05-02 787/week @ 2024-05-09 679/week @ 2024-05-16 778/week @ 2024-05-23 968/week @ 2024-05-30 1079/week @ 2024-06-06 1253/week @ 2024-06-13 1036/week @ 2024-06-20 799/week @ 2024-06-27

4,294 每月下载量
2 个 crate 中使用 (通过 ruint2)

自定义许可证

13KB
210

uint!Bits 字面量提供的宏

uint! 宏的参数中,您可以使用与 Rust 整数字面量相同的语法来编写 UintBits 字面量,但分别使用大写 UB 后缀。请注意,对于具有 B 后缀的十六进制数,存在歧义,在这种情况下需要使用下划线以减少影响。

要使用它,只需在作用域中导入即可

use ruint2::uint;

现在可以创建十进制、十六进制、二进制甚至八进制的常量

# use ruint2::uint;
let avogadro = uint!(602_214_076_000_000_000_000_000_U256);
let cow_key = uint!(0xee79b5f6e221356af78cf4c36f4f7885a11b67dfcc81c34d80249947330c0f82_U256);
let bender = uint!(0b1010011010_U10);

uint! 宏会递归遍历解析树,因此上述内容可以等价地写成

# use ruint2::uint;
uint!{
let avogadro = 602_214_076_000_000_000_000_000_U256;
let cow_key = 0xee79b5f6e221356af78cf4c36f4f7885a11b67dfcc81c34d80249947330c0f82_U256;
let bender = 0b1010011010_U10;
}

这种形式对于查找表特别有用

# use ruint2::{Uint, uint};
const PRIMES: [Uint<128, 2>; 3] = uint!([
    170141183460469231731687303715884105757_U128,
    170141183460469231731687303715884105773_U128,
    170141183460469231731687303715884105793_U128,
]);

如果您尝试创建不适用于该类型的常量,宏将引发编译时错误

# use ruint2::uint;
# uint!{
let sparta = 300_U8;
# }
error: Value too large for Uint<8>: 300
 --> src/example.rs:1:14
  |
1 | let sparta = 300_U8;
  |              ^^^^^^

参考资料

无运行时依赖项