我正在寻找一种字符串转换方法,它将接收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
由于
答案 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];