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 在 值格式化 中
309,896 每月下载量
用于 323 个 Crates (147 个直接使用)
165KB
3.5K SLoC
字节单位
用于与字节单位交互的库。
单位包括 B 代表 1 字节,KB 代表 1000 字节,MiB 代表 1048576 字节,GB 代表 1000000000 字节等,最高可达 E 或 Y(如果启用 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::fmt
的 Byte
实现文档。
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}"));
算术
有 add
、subtract
、multiply
和 divide
方法。
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_unit
和 get_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
文档
许可
依赖项
~0–32MB
~472K SLoC