#primitive #primitive-integer #integer #unsigned-int #extension #unsigned-integer

no-std epui

为原始整数提供等宽(原始)无符号整数:u8 对应 u8,u16 对应 i16,等等

2 个版本

0.1.1 2022 年 1 月 27 日
0.1.0 2022 年 1 月 27 日

#380无标准库

每月 30 次下载
3 个 Crates 中使用(通过 midpoint

MIT/Apache 协议

9KB

为原始整数提供等宽(原始)无符号整数

根据 Rust 参考文档,Rust 中的原始数值整数类型如下

数值类型

整数类型

无符号整数类型包括

类型 最小值 最大值
u8 0 28-1
u16 0 216-1
u32 0 232-1
u64 0 264-1
u128 0 2128-1

有符号二进制补码整数类型包括

类型 最小值 最大值
i8 -(27) 27-1
i16 -(215) 215-1
i32 -(231) 231-1
i64 -(263) 263-1
i128 -(2127) 2127-1

机器相关整数类型

usize 类型是一个与平台指针类型具有相同位数的无符号整数类型。它可以表示进程中的每一个内存地址。

isize 类型是一个与平台指针类型具有相同位数的有符号整数类型。对象和数组大小的理论上限是最大的 isize 值。这确保了 isize 可以用于计算对象或数组指针之间的差异,并且可以访问对象内部的所有字节,以及对象末尾之后的一个字节。

usizeisize 至少是 16 位宽。

注意:许多 Rust 代码可能假设指针、usizeisize 要么是 32 位,要么是 64 位。因此,16 位指针支持有限,可能需要库显式处理和认可才能支持。

为什么需要这个特性

所有原始数值整数类型,包括机器相关类型,都具有已知的大小,可以通过core::mem::size_of<T>()获取,以及对应的有符号或无符号类型,大小精确。像C++ 20标准的中点算法这样的算法,既依赖于等大小的原始无符号整数,也依赖于等大小的原始有符号整数。这个crate提供前者。

有关等大小的原始有符号整数,请参考epsi crate

有符号整数

类型 大小 等大小的原始无符号整数
i8 1字节 u8
i16 2字节 u16
i32 4字节 u32
i64 8字节 u64
i128 16字节 u128
isize 平台相关 usize

无符号整数

类型 大小 等大小的原始无符号整数
u8 1字节 u8
u16 2字节 u16
u32 4字节 u32
u64 8字节 u64
u128 16字节 u128
usize 平台相关 usize

示例

您可能会注意到EquisizedPrimitiveUnsignedIntExt的名称相当长。为了使其更短,建议将导入的trait重命名为EPUI,与crate同名。因为它的使用通常需要与完全限定语法一起使用,这种简写是必不可少的。

  use epui::EquisizedPrimitiveUnsignedIntExt as EPUI;
  let a = -1i8;
  assert_eq!(a as <i8 as EPUI>::EquisizedPrimitiveUnsignedInt, u8::MAX);

类似物

许可

许可协议为Apache License, Version 2.0或MIT license,您可自由选择。
除非您明确声明,否则,根据Apache-2.0许可协议定义的,您有意提交以包括在本crate中的任何贡献,都将双重许可,如上所述,没有任何额外条款或条件。

无运行时依赖