以用户友好的格式显示带宽速度

时间:2010-09-17 19:11:09

标签: c# string performance bandwidth

我正在寻找一种字符串转换方法,它将接收KB / s的输入并将其转换为最简单的可读格式。

e.g。 1500 b / s = 1.46 Kb / s
例如1500 Kb / s = 1.46 Mb / s
例如1500 Mb / s = 1.46 Gb / s

由于

2 个答案:

答案 0 :(得分:6)

试试这个:

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]));

这里可用的序数(前缀)是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

答案 1 :(得分:1)

我在大约30个secondes中制作了这个代码,所以没有验证,但我认为它可以做你想要的

        string vInput = "1500 Kb/s";
        string[] tSize = new string[] { "b/s", "Kb/s", "Mb/s", "Gb/s" };
        string[] tSplit = vInput.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries);
        double vSpeed = Double.Parse(tSplit[0]) / 1024.0;
        vSpeed = Math.Round(vSpeed, 2);
        int i = 0;
        for(i = 0; i < tSize.Length;++i)
        {
            if(tSplit[1].StartsWith(tSize[i]))
            {
                break;
            }
        }
        string vOutput = vSpeed.ToString() + " " + tSize[i+1];