开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载Humanizer 的ByteSizeExtensions是一个静态扩展类为 .NET 开发者提供了一组从任意数值类型构建ByteSize值、将其格式化为2 GB这类人类可读文本以及基于时间间隔计算传输速率如400 B/s的便捷 API。本指南以 2.14.1 版 API 文档为骨架结合当前仓库源码与测试用例逐方法讲解参数语义、格式化规则与本地化行为帮助你直接在项目中使用这些扩展方法完成文件大小展示、存储容量统计与网络吞吐量格式化等任务。类概览一个静态扩展类零配置接入ByteSizeExtensions定义在 src/Humanizer/Bytes/ByteSizeExtensions.cs位于Humanizer命名空间下声明为public static class ByteSizeExtensions继承链为System.Object → ByteSizeExtensions。它的角色非常纯粹把数值 单位的直觉用法转译为对ByteSize结构体的构造调用从而让你写出10.Megabytes()而不是ByteSize.FromMegabytes(10)。从 2.14.1 API 文档看该类包含四组方法方法族方法数作用Bits(...)7 个重载将输入视为比特bit构建ByteSizeBytes(...)8 个重载将输入视为字节byte构建ByteSizeKilobytes / Megabytes / Gigabytes / Terabytes(...)各 8 个重载按对应单位换算构建ByteSizeHumanize(...)3 个重载将ByteSize转成人类可读字符串如2 GBPer(...)1 个方法结合TimeSpan生成可操作的ByteRate速率对象所有单位构建方法的返回值都是Humanizer.Bytes.ByteSize详见 Humanizer.Bytes.ByteSize.mdPer返回Humanizer.Bytes.ByteRate详见 Humanizer.Bytes.ByteRate.md。单位构建方法8 种数值类型的全覆盖重载Bits(...)把整数视为比特数文档中Bits提供 7 个重载覆盖byte、sbyte、short、ushort、int、uint、long全部整数类型public static Humanizer.Bytes.ByteSize Bits(this byte input); public static Humanizer.Bytes.ByteSize Bits(this int input); public static Humanizer.Bytes.ByteSize Bits(this long input); public static Humanizer.Bytes.ByteSize Bits(this sbyte input); public static Humanizer.Bytes.ByteSize Bits(this short input); public static Humanizer.Bytes.ByteSize Bits(this uint input); public static Humanizer.Bytes.ByteSize Bits(this ushort input);每个重载都只是对静态工厂方法ByteSize.FromBits(input)的一行转发见 ByteSizeExtensions.cs。在 ByteSize.cs 中FromBits的实现是new(value / (double)BitsInByte)其中BitsInByte常量值为8——也就是说8.Bits()会得到Bits 8, Bytes 1的ByteSize。这一点被测试 CreatingTests.cs 明确验证var result ByteSize.FromBits(8); Assert.Equal(8, result.Bits); Assert.Equal(1, result.Bytes);Bytes(...)把数值视为字节数Bytes是唯一同时支持double与全部整数类型的单位方法共 8 个重载因此可以直接传入带小数的字节数public static ByteSize Bytes(this byte input); public static ByteSize Bytes(this double input); public static ByteSize Bytes(this int input); public static ByteSize Bytes(this long input); public static ByteSize Bytes(this sbyte input); public static ByteSize Bytes(this short input); public static ByteSize Bytes(this uint input); public static ByteSize Bytes(this ushort input);实现上全部转发ByteSize.FromBytes(input)见 ByteSizeExtensions.cs。FromBytes直接以字节数为内部存储值测试 CreatingTests.cs 验证了1.5.Bytes()会得到Bytes 1.5, Bits 12——即Bits属性按Math.Ceiling(byteSize * 8)向上取整ByteSize.cs。Kilobytes / Megabytes / Gigabytes / Terabytes(...)按 1024 进制换算这四个方法族各提供 8 个重载byte、sbyte、short、ushort、int、uint、double、long语义分别是将输入视为 KB / MB / GB / TB。它们分别转发到ByteSize.FromKilobytes(value)换算因子BytesInKilobyte 1024ByteSize.FromMegabytes(value)换算因子BytesInMegabyte 1,048,576ByteSize.FromGigabytes(value)换算因子BytesInGigabyte 1,073,741,824ByteSize.FromTerabytes(value)换算因子BytesInTerabyte 1,099,511,627,776常量定义见 ByteSize.cs。注意 Humanizer 采用二进制进制1 KB 1024 B作为这些方法的默认换算标准与操作系统文件系统惯例一致。测试 CreatingTests.cs 给出精确换算证据var result ByteSize.FromKilobytes(1.5); Assert.Equal(1536, result.Bytes); // 1.5 * 1024 Assert.Equal(1.5, result.Kilobytes); var result ByteSize.FromGigabytes(1.5); Assert.Equal(1610612736, result.Bytes); // 1.5 * 1073741824扩展方法层面ByteSizeExtensionsTests.cs 逐类型验证了size.Terabytes()等价于ByteSize.FromTerabytes(size)L5-L8、size.Gigabytes()等价于ByteSize.FromGigabytes(size)L76-L79等所有重载。Humanize(...)把字节数量变成人话Humanize是整套扩展方法的核心输出端文档给出三个重载签名如下public static string Humanize(this Humanizer.Bytes.ByteSize input, string format null); public static string Humanize(this Humanizer.Bytes.ByteSize input, string format, System.IFormatProvider formatProvider); public static string Humanize(this Humanizer.Bytes.ByteSize input, System.IFormatProvider formatProvider);三者统一描述为Turns a byte quantity into human readable form, eg 2 GB。参数含义input要格式化的ByteSize值format自定义数字格式串可空formatProvider用于数字与文化单元词本地化的IFormatProvider可空。默认行为自动选择最大的整单位不传format时Humanize直接委托input.ToString()见 ByteSizeExtensions.cs。ByteSize.ToString的规则是选择使数值绝对值 ≥ 1 的最大单位前缀。例如ByteSize.FromKilobytes(10.5).ToString()输出10.5 KB测试见 ToStringTests.csByteSize.FromMegabytes(0.5)会降级输出512 KBL70-L72。默认数字格式等价于0.##即最多保留两位小数并去掉多余的零——FromKilobytes(10.501)输出10.5 KB而不是10.501 KBToStringTests.cs。format 参数数字格式与单位 token 的混合format不只是一个数字格式串它可以同时包含数字占位符和单位 token。底层处理逻辑位于 ByteSize.cs若format为null或G统一替换为0.##若格式串中不含#或0数字占位符自动在前面拼接0.## 因此KB等价于0.## KB格式串中的#.##会被规范化为0.##检测格式串是否包含单位 tokenKB、MB、GB、TB、PB、EB等命中哪个 token 就以哪个单位输出数值其中KB/MB/GB/...的匹配不区分大小写而字节符号B与比特符号b严格区分大小写若未命中任何 token则回退到最大整单位策略。测试 ByteSizeExtensionsTests.cs 提供了大量可直接复用的组合示例// 指定单位2 GB 的数值按 GB token 原样输出 2.Gigabytes().Humanize(MB) // 2048 MB 2.Terabytes().Humanize(GB) // 2048 GB 2000.Bytes().Humanize(KB) // 1.95 KB // 自定义数字精度 2.123.Gigabytes().Humanize(#.##) // 2.12 GB 2.123.Gigabytes().Humanize(#.#) // 2.1 GB 2.123.Kilobytes().Humanize(#.####)// 2.123 KB // 千分位分组 10000000.Bytes().Humanize(#,##0 KB) // 9,766 KB 10000000.Bytes().Humanize(#,##0.# KB) // 9,765.6 KB // 强制比特/字节符号 12.Bits().Humanize(B) // 1.5 B 0.Bytes().Humanize() // 0 b零值回退到比特符号formatProvider 参数数字与文化单元词的本地化Humanize(input, formatProvider)与Humanize(input, format, formatProvider)两个重载接受IFormatProvider。它不仅影响数字的小数点、千分位等格式化还会通过Configurator.GetFormatter(culture)把单位词本地化ByteSize.cs。测试中的法语示例一目了然2.Terabytes().Humanize(null, new CultureInfo(fr)) // 2 To 2.Gigabytes().Humanize(null, new CultureInfo(fr)) // 2 Go 2.Megabytes().Humanize(null, new CultureInfo(fr)) // 2 Mo 2.Kilobytes().Humanize(null, new CultureInfo(fr)) // 2 Ko 2.Bytes().Humanize(null, new CultureInfo(fr)) // 2 o 2.Bits().Humanize(null, new CultureInfo(fr)) // 2 b比特符号不本地化对应测试见 ByteSizeExtensionsTests.cs。这意味着同一个格式化代码在不同CultureInfo下会自动输出符合当地习惯的单元词无需额外分支。Per(...)从字节量到传输速率Per是唯一返回非字符串类型的方法文档签名如下public static Humanizer.Bytes.ByteRate Per(this Humanizer.Bytes.ByteSize size, System.TimeSpan interval);size字节数量interval产生速率的测量时间间隔。实现只是一行构造ByteSizeExtensions.csnew ByteRate(size, interval)。ByteRate类见 ByteRate.cs封装Size与Interval两个属性并提供自己的Humanize方法public string Humanize(TimeUnit timeUnit TimeUnit.Second); public string Humanize(string? format, TimeUnit timeUnit TimeUnit.Second, CultureInfo? culture null);timeUnit只支持Second、Minute、Hour三档分别输出/s、/min、/h后缀。内部先把字节量折算到目标时间窗再复用ByteSize.Humanize格式化字节部分ByteRate.cs。测试 ByteRateTests.cs 给出了完整的行为矩阵ByteSize.FromBytes(400).Per(TimeSpan.FromSeconds(1)).Humanize() // 400 B/s ByteSize.FromBytes(4 * 1024).Per(TimeSpan.FromSeconds(1)).Humanize() // 4 KB/s ByteSize.FromBytes(4 * 2 * 1024 * 1024).Per(TimeSpan.FromSeconds(2)).Humanize() // 4 MB/s4 MB 分摊到 2 秒后仍按每秒折算 // 指定展示时间单位 ByteSize.FromMegabytes(1).Per(TimeSpan.FromSeconds(60)).Humanize(TimeUnit.Minute) // 1 MB/min ByteSize.FromMegabytes(1).Per(TimeSpan.FromSeconds(3600)).Humanize(TimeUnit.Hour) // 1 MB/h // format 同样作用于字节部分 ByteSize.FromBytes(19854651984).Per(TimeSpan.FromSeconds(1)).Humanize(#.##) // 18.49 GB/sByteRate还实现了IComparableByteRate、IEquatableByteRate按归一化后的每秒字节数BytesPerSecond见 ByteRate.cs比较因此不同时间窗测得的速率可以直接排序或判等。2.14.1 之外的进阶能力当前仓库已包含2.14.1 版 API 文档只收录了上述方法但当前仓库的 ByteSizeExtensions.cs 还扩展了更多能力供升级后使用更大的单位Petabytes(...)、Exabytes(...)、Pebibytes(...)及对应的FromPetabytes、FromExabytes、FromPebibytes工厂方法ByteSize.cs同时ByteSize提供Pebibytes、Gibibytes、Mebibytes、Kibibytes等二进制前缀属性复合格式化HumanizeComposite按降序把大数值拆成多个部分如10242.Bytes().HumanizeComposite()输出10 KB 2 BHumanizeComposite(separator: , , toWords: true)输出10 kilobytes, 2 bytesprecision参数控制最多输出的非零部分数见 ByteSizeExtensionsTests.cs显式单位系统HumanizeWithUnitSystem通过ByteSizeUnitSystem.DecimalSi1000 进制输出kB/MB/GB或ByteSizeUnitSystem.BinaryIec1024 进制输出KiB/MiB/GiB精确控制单位制Legacy保持旧行为ByteRate也提供对应的HumanizeWithUnitSystemToFullWords与Format前者输出完整单词2 gigabytes后者在指定单位系统下做精确格式化ByteSize.cs。这些能力的语义边界哪些 token 允许、何时抛FormatException、何时抛ArgumentOutOfRangeException都在对应方法的 XML 文档注释中有明确说明可在升级到新版后直接查阅。典型应用场景小结结合文档与源码ByteSizeExtensions最实用的几个落地场景是存储/下载大小展示fileLength.Bytes().Humanize()一行得到1.5 MB免去手写单位换算网络带宽统计downloaded.Bytes().Per(TimeSpan.FromSeconds(elapsed)).Humanize()输出2.4 MB/s并可切换TimeUnit.Minute/Hour展示不同口径多语言界面把CultureInfo传入Humanize的formatProvider参数即可自动本地化单位词精确排版利用format参数控制小数位与千分位如#,##0.# KB输出9,765.6 KB。所有方法均为无状态的纯扩展不依赖全局配置即可开箱即用如需更换格式化器如自定义本地化单元词可进一步研究 Configurator.cs 与 DefaultFormatter.cs 的注册机制。赞分享开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载相关推荐Humanizer ByteSizeExtensions 完全指南.NET 字节与位单位转换、人性化格式化与速率计算的扩展方法全景Humanizer ByteSizeExtensions 完全指南.NET 字节与位单位转换、人性化格式化与速率计算的扩展方法全景 本篇技术指南围绕 Huma开发工具Humanizer ByteSizeExtensions 完整指南用 C 扩展方法优雅地处理字节、比特与传输速率Humanizer ByteSizeExtensions 完整指南用 C 扩展方法优雅地处理字节、比特与传输速率 本文是 Humanizer 库 ByteSi开发工具Humanizer ByteSizeExtensions 深度解析从数值类型构建并人性化格式化 ByteSizeHumanizer ByteSizeExtensions 深度解析从数值类型构建并人性化格式化 ByteSize 本篇以 Humanizer 2.13.14开发工具上一篇3分钟搞定VideoDownloadHelper视频下载插件终极安装使用指南下一篇中兴光猫配置解密工具轻松破解光猫加密配置的利器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考