15 个版本 (5 个稳定版)

使用旧的 Rust 2015

1.3.0 2023年8月23日
1.2.0 2023年2月24日
1.1.0 2021年7月30日
1.0.1 2020年5月22日
0.0.1 2015年4月19日

#2 in 值格式化

Download history 199892/week @ 2024-04-22 191348/week @ 2024-04-29 191328/week @ 2024-05-06 196250/week @ 2024-05-13 207652/week @ 2024-05-20 198228/week @ 2024-05-27 205802/week @ 2024-06-03 212405/week @ 2024-06-10 197815/week @ 2024-06-17 200138/week @ 2024-06-24 190829/week @ 2024-07-01 208506/week @ 2024-07-08 191948/week @ 2024-07-15 222772/week @ 2024-07-22 229856/week @ 2024-07-29 233966/week @ 2024-08-05

892,925 每月下载量
用于 821 个crates (239 个直接使用)

Apache-2.0

26KB
571

ByteSize

Build Status Crates.io Version

ByteSize是一个用于人类可读的字节数表示的实用工具。

功能

  • 预定义的各种大小单位的常量(例如,B,Kb,kib,Mb,Mib,Gb,Gib,... PB)
  • ByteSize 类型,表示可转换为不同大小单位的单位。
  • ByteSize 的算术运算
  • ByteSize 实现了 FromStr,允许从字符串大小表示(如 1.5KiB 和 521TiB)进行解析。
  • 对二进制和人类可读反序列化程序(如JSON)的Serde支持

API文档

使用方法

将其添加到您的 Cargo.toml 中

[dependencies]
bytesize = {version = "1.2.0", features = ["serde"]}

并将其添加到您的crate根目录中

extern crate bytesize;

示例

人类可读表示(SI单位和二进制单位)

#[allow(dead_code)]
fn assert_display(expected: &str, b: ByteSize) {
  assert_eq!(expected, format!("{}", b));
}

#[test]
  fn test_display() {
    assert_display("215 B", ByteSize(215));
    assert_display("215 B", ByteSize::b(215));
    assert_display("1.0 KB", ByteSize::kb(1));
    assert_display("301.0 KB", ByteSize::kb(301));
    assert_display("419.0 MB", ByteSize::mb(419));
    assert_display("518.0 GB", ByteSize::gb(518));
    assert_display("815.0 TB", ByteSize::tb(815));
    assert_display("609.0 PB", ByteSize::pb(609));
  }

  fn assert_to_string(expected: &str, b: ByteSize, si: bool) {
    assert_eq!(expected.to_string(), b.to_string_as(si));
  }

  #[test]
  fn test_to_string() {
    assert_to_string("215 B", ByteSize(215), true);
    assert_to_string("215 B", ByteSize(215), false);

    assert_to_string("215 B", ByteSize::b(215), true);
    assert_to_string("215 B", ByteSize::b(215), false);

    assert_to_string("1.0 kiB", ByteSize::kib(1), true);
    assert_to_string("1.0 KB", ByteSize::kib(1), false);

    assert_to_string("293.9 kiB", ByteSize::kb(301), true);
    assert_to_string("301.0 KB", ByteSize::kb(301), false);

    assert_to_string("1.0 MiB", ByteSize::mib(1), true);
    assert_to_string("1048.6 KB", ByteSize::mib(1), false);

    assert_to_string("399.6 MiB", ByteSize::mb(419), true);
    assert_to_string("419.0 MB", ByteSize::mb(419), false);

    assert_to_string("482.4 GiB", ByteSize::gb(518), true);
    assert_to_string("518.0 GB", ByteSize::gb(518), false);

    assert_to_string("741.2 TiB", ByteSize::tb(815), true);
    assert_to_string("815.0 TB", ByteSize::tb(815), false);

    assert_to_string("540.9 PiB", ByteSize::pb(609), true);
    assert_to_string("609.0 PB", ByteSize::pb(609), false);
  }

  #[test]
  fn test_parsing_from_str() {
      // shortcut for writing test cases
      fn parse(s: &str) -> u64 {
          s.parse::<ByteSize>().unwrap().0
      }

      assert_eq!("0".parse::<ByteSize>().unwrap().0, 0);
      assert_eq!(parse("0"), 0);
      assert_eq!(parse("500"), 500);
      assert_eq!(parse("1K"), Unit::KiloByte * 1);
      assert_eq!(parse("1Ki"), Unit::KibiByte * 1);
      assert_eq!(parse("1.5Ki"), (1.5 * Unit::KibiByte) as u64);
      assert_eq!(parse("1KiB"), 1 * Unit::KibiByte);
      assert_eq!(parse("1.5KiB"), (1.5 * Unit::KibiByte) as u64);
      assert_eq!(parse("3 MB"), Unit::MegaByte * 3);
      assert_eq!(parse("4 MiB"), Unit::MebiByte * 4);
      assert_eq!(parse("6 GB"), 6 * Unit::GigaByte);
      assert_eq!(parse("4 GiB"), 4 * Unit::GibiByte);
      assert_eq!(parse("88TB"), 88 * Unit::TeraByte);
      assert_eq!(parse("521TiB"), 521 * Unit::TebiByte);
      assert_eq!(parse("8 PB"), 8 * Unit::PetaByte);
      assert_eq!(parse("8P"), 8 * Unit::PetaByte);
      assert_eq!(parse("12 PiB"), 12 * Unit::PebiByte);
  }

算术运算

extern crate bytesize;

use bytesize::ByteSize;

fn byte_arithmetic_operator() {
  let x = ByteSize::mb(1);
  let y = ByteSize::kb(100);

  let plus = x + y;
  print!("{}", plus);

  let minus = ByteSize::tb(100) + ByteSize::gb(4);
  print!("{}", minus);
}

依赖关系

~170KB