Rust字节格式化库pretty-bytes的使用,高效转换文件大小和字节数为人类可读格式

Rust字节格式化库pretty-bytes的使用,高效转换文件大小和字节数为人类可读格式

简介

pretty-bytes是一个Rust库,用于将字节数转换为人类可读的字符串格式。例如:1337 → 1.34 kB。这对于显示文件大小给用户非常有用。

安装

作为CLI工具安装

cargo install pretty-bytes

作为库安装

在项目中运行以下命令:

cargo add pretty-bytes

或者在Cargo.toml中添加:

pretty-bytes = "0.2.2"

使用示例

CLI使用方式

$ pretty-bytes 1337
1.34 kB

$ echo 1337 | pretty-bytes
1.34 kB

API使用方式

extern crate pretty_bytes;
use pretty_bytes::converter::convert;

println!("{}", convert(1337_f64));

完整示例代码

extern crate pretty_bytes;
use pretty_bytes::converter::convert;

fn main() {
    // 转换不同的字节大小
    println!("1000 bytes: {}", convert(1000_f64));       // 1 kB
    println!("1024 bytes: {}", convert(1024_f64));       // 1.02 kB
    println!("1_000_000 bytes: {}", convert(1_000_000_f64));  // 1 MB
    println!("1_048_576 bytes: {}", convert(1_048_576_f64));  // 1.05 MB
    println!("1_000_000_000 bytes: {}", convert(1_000_000_000_f64));  // 1 GB
    println!("1_073_741_824 bytes: {}", convert(1_073_741_824_f64));  // 1.07 GB
    
    // 示例:转换文件大小
    let file_size = 2_500_000; // 2.5MB文件
    println!("文件大小: {}", convert(file_size as f64));  // 2.5 MB
}

注意事项

  • 该库将自动选择合适的单位(B, kB, MB, GB, TB等)
  • 默认使用1000作为基数(1kB = 1000B)
  • 支持浮点数输入

许可证

MIT


1 回复

Rust字节格式化库pretty-bytes的使用指南

pretty-bytes是一个实用的Rust库,用于将字节大小转换为人类可读的格式(如"1.2 MB"或"3.4 GB")。它特别适合在需要显示文件大小、内存使用量或网络传输量的应用中。

安装

Cargo.toml中添加依赖:

[dependencies]
pretty-bytes = "0.4"

基本用法

简单转换

use pretty_bytes::converter::convert;

fn main() {
    println!("{}", convert(1000_f64)); // "1 kB"
    println!("{}", convert(1024_f64)); // "1.02 kB"
    println!("{}", convert(1_000_000_f64)); // "1 MB"
    println!("{}", convert(1_048_576_f64)); // "1.05 MB"
}

自定义选项

use pretty_bytes::converter::convert;

let options = pretty_bytes::Options {
    binary: true,       // 使用二进制前缀 (KiB, MiB 等)
    signed: false,      // 是否显示符号
    thousands_separator: Some(','), // 千位分隔符
};

println!("{}", convert(1_048_576_f64, options)); // "1 MiB"

高级功能

处理负数

use pretty_bytes::converter::convert;

println!("{}", convert(-1_000_000_f64)); // "-1 MB"

不同单位系统

use pretty_bytes::converter::convert;

// 十进制单位 (KB, MB, GB)
println!("{}", convert(1_000_000_f64)); // "1 MB"

// 二进制单位 (KiB, MiB, GiB)
let options = pretty_bytes::Options {
    binary: true,
    ..Default::default()
};
println!("{}", convert(1_048_576_f64, options)); // "1 MiB"

自定义小数位数

use pretty_bytes::converter::convert;

let options = pretty_bytes::Options {
    decimal_places: 4,  // 保留4位小数
    ..Default::default()
};

println!("{}", convert(1_234_567_f64, options)); // "1.2346 MB"

实际应用示例

文件大小格式化

use std::fs;
use pretty_bytes::converter::convert;

fn get_file_size(path: &str) -> String {
    let metadata = fs::metadata(path).unwrap();
    convert(metadata.len() as f64)
}

println!("文件大小: {}", get_file_size("Cargo.toml"));

网络流量监控

use pretty_bytes::converter::convert;

struct NetworkStats {
    bytes_received: u64,
    bytes_sent: u64,
}

impl NetworkStats {
    fn display(&self) {
        println!("接收: {}", convert(self.bytes_received as f64));
        println!("发送: {}", convert(self.bytes_sent as f64));
    }
}

完整示例demo

以下是一个整合了多种功能的完整示例:

use pretty_bytes::converter::convert;
use pretty_bytes::Options;
use std::fs;

fn main() {
    // 基本转换示例
    println!("=== 基本转换 ===");
    println!("1000 bytes: {}", convert(1000_f64));  // 1 kB
    println!("1024 bytes: {}", convert(1024_f64));  // 1.02 kB
    println!("1,000,000 bytes: {}", convert(1_000_000_f64));  // 1 MB
    
    // 自定义选项示例
    println!("\n=== 自定义选项 ===");
    let options = Options {
        binary: true,
        signed: true,
        thousands_separator: Some(','),
        decimal_places: 3,
    };
    println!("1,048,576 bytes: {}", convert(1_048_576_f64, options));  // 1.000 MiB
    
    // 文件大小示例
    println!("\n=== 文件大小 ===");
    match fs::metadata("Cargo.toml") {
        Ok(metadata) => {
            println!("Cargo.toml 大小: {}", convert(metadata.len() as f64));
        }
        Err(e) => println!("无法获取文件信息: {}", e),
    }
    
    // 网络流量示例
    println!("\n=== 网络流量 ===");
    let stats = NetworkStats {
        bytes_received: 2_500_000,
        bytes_sent: 1_300_000,
    };
    stats.display();
}

struct NetworkStats {
    bytes_received: u64,
    bytes_sent: u64,
}

impl NetworkStats {
    fn display(&self) {
        println!("接收: {}", convert(self.bytes_received as f64));
        println!("发送: {}", convert(self.bytes_sent as f64));
    }
}

注意事项

  1. 默认情况下使用十进制单位(KB、MB、GB等),1 KB = 1000 bytes
  2. 可以通过设置binary: true来使用二进制单位(KiB、MiB、GiB等),1 KiB = 1024 bytes
  3. 输入应为f64类型,整数需要转换
  4. 支持从字节(10^0)到尧字节(10^24)的范围

pretty-bytes库简单易用,是处理字节格式化需求的理想选择,特别适合需要向用户展示存储空间、文件大小或网络流量的应用程序。

回到顶部