Pet*_*ter 3 c# string performance bandwidth
我正在寻找一种字符串转换方法,它将接收KB/s的输入并将其转换为最简单的可读格式.
例如1500 b/s = 1.46 Kb/s,
例如1500 Kb/s = 1.46 Mb/s,
例如1500 Mb/s = 1.46 Gb/s
谢谢
试试这个:
var ordinals = new [] {"","K","M","G","T","P","E"};
long bandwidth = GetTheBandwidthInBitsPerSec();
decimal rate = (decimal)bandwidth;
var ordinal = 0;
while(rate > 1024)
{
rate /= 1024;
ordinal++;
}
output.Write(String.Format("Bandwidth: {0} {1}b/s",
Math.Round(rate, 2, MidpointRounding.AwayFromZero),
ordinals[ordinal]));
Run Code Online (Sandbox Code Playgroud)
这里提供的序数(前缀)是Kilo-,Mega-,Giga-,Tera-,Peta-,Exa-.如果你真的认为你的程序将在足够长的时间内看到Zettabit和Yottabit网络带宽,那么无论如何都要将Z和Y前缀首字母放入数组中.
要将一个格式化的字符串转换为另一个格式化字符串,请在空格上进行拆分,查看将成为该数字的术语,然后立即搜索其中一个前缀的术语.找到数组中序数的索引,加1,然后乘以1024多次得到每秒位数:
var bwString= GetBandwidthAsFormattedString(); //returns "Bandwidth: 1056 Kb/s";
var parts = String.Split(bwString, " ");
var number = decimal.Parse(parts[1]);
var ordinalChar = parts[2].First().ToString();
ordinalChar = ordinalChar = "b" ? "" : ordinalChar;
var ordinal = ordinals.IndexOf(ordinalChar)
... //previous code, substituting the definition of ordinal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1927 次 |
| 最近记录: |