1个不稳定版本
0.1.0 | 2023年5月15日 |
---|
#315 在 嵌入式开发
5,983 每月下载量
在 9 个crate中使用 (2 直接)
100KB
2K SLoC
[2]: https://github.com/Robbepop/intx/actions/workflows/rust.yml [4]: https://docs.rs/intx [6]: https://crates.io/crates/intx
持续集成 | 文档 | Crates.io |
---|---|---|
[][2] | [][4] | [][6] |
intx
- Rust的非标准固定位宽整数
警告:由于缺少大量测试,此crate尚未准备好用于生产。
此crate提供了具有非标准且固定位宽的新整数类型,例如 U24
、I48
、U96
等等,重点关注数据布局和对齐。
- 此crate提供的所有整数类型都使用它们表示所需的最少字节数。例如,
U24
需要3个字节,I48
需要6个字节。 - 此crate提供的所有整数类型的对齐方式始终为1。如果需要其他对齐方式,建议将整数类型包装在新的类型中,并通过
#[align(N)]
强制对齐。 - 目前,此crate提供的整数类型没有定义丰富的算术方法。相反,预期将它们转换为Rust原生整数,进行计算,最后将结果转换回来。如果需求,未来可能会支持此功能。
- 此crate提供的整数类型的二进制表示与Rust内置整数类型一样,使用二进制补码。
数据布局
该crate内部提供的所有整数类型都由一个单字节数组组成。例如,结构体U24
的构成如下:struct U24([u8; 3]);
,这有助于实现最优的内存使用和1字节对齐(如果需要的话)。
API
该crate提供的整数类型只具有非常有限的API。
-
所有整数类型实现的特质如下
Clone
、Copy
、Default
、Eq
、PartialEq
、Ord
、PartialOrd
、Hash
- 对于每个整数类型,都尽可能高效地实现了通用特质。
Debug
、Display
、Binary
、Octal
、LowerHex
、UpperHex
、LowerExp
、UpperExp
- 整数类型模仿了下一个更大的Rust内置整数类型的显示表示。
-
还实现了Endian感知的转换例程
from_ne_bytes
、to_ne_bytes
:从和到本地Endian字节的转换。(始终高效)from_le_bytes
、to_le_bytes
:从和到小Endian字节的转换。from_be_bytes
、to_be_bytes
:从和到大Endian字节的转换。
-
丰富的
From
和TryFrom
实现- 所有提供的整数类型都有一系列丰富的
From
和TryFrom
特质实现,可以高效地在不同整数类型和Rust内置整数之间进行转换。
- 所有提供的整数类型都有一系列丰富的
用法
该crate的重点是数据布局、对齐和空间优化。它是在wasmi
解释器需要更高效的内部字节码表示时作为一个实验而制作的。例如,在某些位置使用3字节大小的U24
而不是4字节大小的u32
,这允许Rust编译器在某些情况下更有效地打包数据结构,特别是在使用enum
类型时。
如果您的重点在于逻辑方面,您主要对非标准但固定位宽的整数类型的算术运算感兴趣,那么可能ux
crate更适合您。
替代方案
替代的ux
crate也提供了非标准且固定位宽的整数,但这两个crate的关注点非常不同。
属性 | intx |
ux |
---|---|---|
size_of |
所有整数类型都需要它们表示的最小字节数。例如,size_of<intx::U24>() == 3 |
所有整数类型都具有与下一个最大的Rust内置整数原语相同的 size_of 。例如,size_of<ux::u24>() == size_of<u32>() == 4 |
align_of |
所有整数类型具有1的对齐方式。如果需要其他对齐方式,可以将整数类型包装在 newtype 中,并通过 #[align(N)] 强制另一个对齐方式。 |
所有整数类型都具有与下一个最大的Rust内置整数原语相同的 align_of 。例如 align_of<ux::u24>() == align_of<u32> == 4 。 |
焦点 | 使用整数对打包数据结构的布局和对齐。 | 对非标准位宽整数类型的算术操作。 |
API | 整数类型提供了最小的API界面。主要是整数和Rust原语之间的 From 和 TryFrom 实现以及从Rust原语中已知的字节转换,如 to_ne_bytes 和 from_le_bytes 。 |
整数类型试图模仿Rust内置整数类型,提供大量对它们的算术操作。 |
这两个crate都提供了在不同整数类型和Rust原语之间进行转换的丰富支持。
许可
在以下任一许可下授权:
-
Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
-
MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义的,任何有意提交以包含在你所做工作的贡献,都应按上述方式双许可,不附加任何额外条款或条件。