50 个稳定版本 (4 个主要版本)

5.1.4 2024年1月23日
5.1.2 2023年12月17日
5.0.3 2023年11月26日
4.0.19 2023年3月15日
1.0.2 2018年7月30日

#366值格式化

Download history 75872/week @ 2024-04-23 68207/week @ 2024-04-30 70454/week @ 2024-05-07 72777/week @ 2024-05-14 66645/week @ 2024-05-21 75362/week @ 2024-05-28 75744/week @ 2024-06-04 77377/week @ 2024-06-11 71966/week @ 2024-06-18 71276/week @ 2024-06-25 72023/week @ 2024-07-02 78877/week @ 2024-07-09 71792/week @ 2024-07-16 76348/week @ 2024-07-23 73028/week @ 2024-07-30 76003/week @ 2024-08-06

309,896 每月下载量
用于 323 个 Crates (147 个直接使用)

MIT 许可协议

165KB
3.5K SLoC

字节单位

CI

用于与字节单位交互的库。

单位包括 B 代表 1 字节,KB 代表 1000 字节,MiB 代表 1048576 字节,GB 代表 1000000000 字节等,最高可达 EY(如果启用 u128 功能)。

用法

存储位/字节数据的类型默认为 u64,这意味着支持的最高单位为 E。如果启用 u128 功能,数据类型将使用 u128,将支持的最高单位提高到 Y

单位

可以使用枚举 Unit 来表示位/字节单位。

use byte_unit::Unit;

assert_eq!("KB", Unit::KB.as_str());
assert_eq!("MiB", Unit::MiB.as_str());

assert_eq!(Unit::KB, Unit::parse_str("K", true, true).unwrap());
assert_eq!(Unit::Kbit, Unit::parse_str("K", true, false).unwrap());

assert_eq!(Unit::KB, Unit::parse_str("KB", true, true).unwrap());
assert_eq!(Unit::KB, Unit::parse_str("Kb", true, true).unwrap());
assert_eq!(Unit::Kbit, Unit::parse_str("Kbit", true, true).unwrap());

assert_eq!(Unit::KB, Unit::parse_str("KB", false, true).unwrap());
assert_eq!(Unit::Kbit, Unit::parse_str("Kb", false, true).unwrap());

字节

可以使用 Byte 结构体来表示字节大小。

可以使用关联函数 from_* 从不同数据类型创建 Byte 实例。可以使用 as_* 方法检索原始类型的大小。

use byte_unit::{Byte, Unit};

assert_eq!(15000, Byte::from_u64(15000).as_u64());
assert_eq!(15000, Byte::from_u64_with_unit(15, Unit::KB).unwrap().as_u64());

您还可以解析字符串来创建 Byte 实例。

use byte_unit::Byte;

assert_eq!(50840000, Byte::parse_str("50.84 MB", true).unwrap().as_u64());

Byte 实例可以精确地格式化为字符串。有关更详细的用法,请参阅 Display::fmtByte 实现文档。

use byte_unit::Byte;

let byte = Byte::from_u64(15500);

assert_eq!("15500", byte.to_string());

assert_eq!("15.5 KB", format!("{byte:#}"));
assert_eq!("15500 B", format!("{byte:#.0}"));

算术

addsubtractmultiplydivide 方法。

use byte_unit::Byte;

let a = Byte::from_u64(15500);
let b = Byte::from_u64(500);

assert_eq!(16000, a.add(b).unwrap().as_u64());
assert_eq!(15000, a.subtract(b).unwrap().as_u64());

assert_eq!(31000, a.multiply(2).unwrap().as_u64());
assert_eq!(3100, a.divide(5).unwrap().as_u64());

找到合适的单位

get_exact_unitget_recoverable_unit 方法对于想要找到适合 Byte 实例的单位非常有用。

use byte_unit::{Byte, Unit};

let byte = Byte::from_u64(50840000);

assert_eq!((50840, Unit::KB), byte.get_exact_unit(false));
assert_eq!((50.84f64.try_into().unwrap(), Unit::MB), byte.get_recoverable_unit(false, 2));
assert_eq!((50840.into(), Unit::KB), byte.get_recoverable_unit(false, 0));

AdjustedByte

可以使用 AdjustedByte 结构体来大致表示带单位的字节数。

要更改 Byte 实例的单位,可以使用 get_adjusted_unit 方法。

AdjustedByte 实例可以格式化为字符串。有关更详细的用法,请参阅 Display::fmt 的实现文档,该文档适用于 AdjustedByte

use byte_unit::{Byte, Unit};

let byte = Byte::parse_str("123KiB", true).unwrap();

let adjusted_byte = byte.get_adjusted_unit(Unit::KB);

assert_eq!("125.952 KB", adjusted_byte.to_string());
assert_eq!("125.95 KB", format!("{adjusted_byte:.2}"));

可以使用 get_appropriate_unit 方法自动为创建 AdjustedByte 实例找到一个合适的单位。

use byte_unit::{Byte, Unit, UnitType};

let byte = Byte::from_u64(1500000);

let adjusted_byte = byte.get_appropriate_unit(UnitType::Binary);

assert_eq!("1.43 MiB", format!("{adjusted_byte:.2}"));

可以使用 Bit 结构体来表示位的大小。

必须启用 bit 功能。

Bit 结构体和 Byte 结构体的用法非常相似。还有一个 AdjustedBit 结构体。区别在于 Bit 结构体的 parse_str 方法不能配置为忽略大小写;它始终不忽略大小写。

use byte_unit::{Bit, Unit};

let bit = Bit::parse_str("123Kib").unwrap();

let adjusted_bit = bit.get_adjusted_unit(Unit::Kbit);

assert_eq!("125.952 Kb", adjusted_bit.to_string());
assert_eq!("125.95 Kb", format!("{adjusted_bit:.2}"));

无 Std

禁用默认功能以在不使用 std 的情况下编译此 crate。

[dependencies.byte-unit]
version = "*"
default-features = false
features = ["byte"]

Serde 支持

启用 serde 功能以支持 serde 框架。

[dependencies.byte-unit]
version = "*"
features = ["serde"]

Rocket 支持

启用 rocket 功能以支持 Rocket 框架。

[dependencies.byte-unit]
version = "*"
features = ["rocket"]

Crates.io

https://crates.io/crates/byte-unit

文档

https://docs.rs/byte-unit

许可

MIT

依赖项

~0–32MB
~472K SLoC