关于c#:如何正确将字节大小转换为兆字节或千兆字节? 您所在的位置:网站首页 字节和兆转化 关于c#:如何正确将字节大小转换为兆字节或千兆字节?

关于c#:如何正确将字节大小转换为兆字节或千兆字节?

2024-07-11 11:40| 来源: 网络整理| 查看: 265

我在C#项目中使用DriveInfo类来检索给定驱动器上的可用字节。 如何正确地将此数字转换为兆字节或千兆字节? 我猜想,除以1024将无法完成这项工作。 结果始终与Windows资源管理器中显示的结果不同。

相关讨论 .net的可能重复项是否提供了一种将字节转换为KB,MB,GB等的简便方法?

1024是正确的程序用法。

之所以会有差异,可能是由于driveinfo报告为"可用空间"和Windows认为可用空间不同。

请注意,只有驱动器制造商使用1,000。在Windows和大多数程序中,正确的缩放比例是1024。

同样,尽管编译器仍应对此进行优化,但可以通过仅将每个幅度的位偏移10位来完成此计算:

KB = B >> 10 MB = KB >> 10 = B >> 20 GB = MB >> 10 = KB >> 20 = B >> 30

尽管出于可读性考虑,我希望连续除以1024会更清楚。

相关讨论 是的,仅驱动器制造商使用基于1000的定义。这就是为什么您的" 4.7 GB"驱动器实际为4,700,372,992字节," 50 GB"蓝光仅为50,050,629,632字节," 128 kbps" mp3实际上为每秒128,000位," 3.1兆像素"摄像机只有3,145,728像素的原因。 2 GHz处理器实际上是2,000,000,000赫兹,一条16 GB / s的内存总线实际上是每秒16,000,000字节,... 正如谈论驱动器一样,该声明仍然有效。我可以更明确地指出,硬件制造商以十亿美元为单位表示大小,而软件设计人员以千兆字节为单位表示大小,但其含义足够明确。您正确地说许多其他问题也有类似的问题,但是此讨论是关于文件和驱动器的大小,而不是处理器速度,图像传感器的大小等。对不起,如果我感到困惑,希望这可以解决。 1024仅是"正确的",因为它表示磁盘上的实际位数。但是,如果您担心正确性,则需要使用" GiB"单位显示。使用1024并将其称为" GB"在技术上是不正确的。 GB正式是10亿,而不是1024。我认为从人为因素的角度来看1000是正确的用法。 1吉瓦等于1000兆瓦。 1 GHz是1000 MHz。同样,(为了使人类更容易进行数学计算),1000 GB是1000 MB。 不,@ Adam,@ Bryan是正确的。当您谈论"驱动器"或"字节"时,标准SI前缀的含义不同,这是没有意义的,它的10的幂而不是2的幂。使用2的幂时,正确的术语是兆字节,而不是兆字节。 @ Bryan,@ john-如果您的程序报告的操作系统号与操作系统和其他所有程序不同,用户将抱怨。如果您希望获得合理的用户体验,则应认真考虑遵守通用约定。但是,您可以根据自己的需要来执行它的程序,如果您准备好处理有关GiB是什么,或者为什么您的软件报告的驱动器大小不同于他们看到的所有其他内容的客户问题,请继续使用。请记住,SI前缀非常适合技术文档,但不一定是最终用户容易理解的设计。 苹果软件报告文件大小和驱动器存储为1 GB = 10亿字节,我想我已经看到其他一些程序也这样做了。一次出现了整整千分之1024的事情,当时在可寻址空间上节省了几位是一件大事,而每个变量除以1024节省几位的计算量要比除以1000便宜得多,但是对于现代硬件而言,这几乎无法做到有所不同。但是,关心差异确实并没有太多收获。做任何使您快乐的事情,因为无论如何,有些人会告诉您您错了。

XKCD有明确的答案:

相关讨论 在KBa中,多余的位用于错误检测。 ;-D @Adam Davis对于ECC RAM,实际上实际上是在做的事情。 尽管很有趣,但它无法回答问题,可能会使那些容易混淆的人感到困惑。 有些机器具有非标准体系结构,每个字节的位数比8多或少。我想到的是UNIVAC 1103 / 1103A / 1105/1100/2200大型机,其每字节9位(以及运行仅使用6位程序的潜力) -位/字节)。因此,KBa将不再是这些计算机上的Bakers Kilobyte,而是标准的。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869/// /// Function to convert the given bytes to either Kilobyte, Megabyte, or Gigabyte /// /// Double -> Total bytes to be converted /// String -> Type of conversion to perform /// Int32 -> Converted bytes /// public static double ConvertSize(double bytes, string type) {     try     {         const int CONVERSION_VALUE = 1024;         //determine what conversion they want         switch (type)         {             case"BY":                  //convert to bytes (default)                  return bytes;                  break;             case"KB":                  //convert to kilobytes                  return (bytes / CONVERSION_VALUE);                  break;             case"MB":                  //convert to megabytes                  return (bytes / CalculateSquare(CONVERSION_VALUE));                  break;             case"GB":                  //convert to gigabytes                  return (bytes / CalculateCube(CONVERSION_VALUE));                  break;             default:                  //default                  return bytes;                  break;           }      }      catch (Exception ex)      {          Console.WriteLine(ex.Message);          return 0;       } } /// /// Function to calculate the square of the provided number /// /// Int32 -> Number to be squared /// Double -> THe provided number squared /// public static double CalculateSquare(Int32 number) {      return Math.Pow(number, 2); } /// /// Function to calculate the cube of the provided number /// /// Int32 -> Number to be cubed /// Double -> THe provided number cubed /// public static double CalculateCube(Int32 number) {      return Math.Pow(number, 3); } //Sample Useage String Size ="File is" + ConvertSize(250222,"MB") +" Megabytes in size"

1024实际上是错误的。国际工程社区(IEC)在2000年制定了一个标准,但遗憾的是,该标准被计算机行业忽略。该标准基本上说

1000字节是千字节,1000KB是1 MB,依此类推。缩写为KB,MB,GB等。 广泛使用的1024字节= 1 KB应该改为1024字节= 1 Kibibyte(KiB),1024 KiB = 1 Mebibyte(MiB),1024 MiB = 1 Gibibyte(GiB),依此类推。

大家都可以在IEC SI区域上阅读它。

因此,为了使您的转换正确无误并符合国际标准,您应该使用此科学计数法。

相关讨论 标准与否,以与主机OS不同的方式报告磁盘使用情况是荒谬的! 问题在于那些主机操作系统做错了,任何最终用户都想知道为什么他在商店中购买的全新磁盘安装后报告的次数少于包装盒上印刷的结果。 回复:"以不同于主机OS的方式报告磁盘使用情况是荒谬的":Snow Leopard(Mac OSX 10.6)使用值1000(support.apple.com/kb/TS2419) -1表示" 1024实际上是错误的"。 IEC可能会说1000,但是GNU会说1024(在Linux中尝试做df -h)。看来IEC只是硬盘制造商的典当。 使用标准忽略其他! kB十进制KB二进制

这取决于您是否需要实际的文件大小或磁盘上的大小。实际文件大小是文件在内存中使用的实际字节数。磁盘上的大小取决于磁盘/文件系统的文件大小和块大小。

我有一个淡淡的回忆,关于是否使用1000或1024的答案在于前缀的大小写。 例: 如果使用"科学的" 1000标度,则"科学的"单位将为kB(以kg,kN等为单位)。如果使用以计算机为中心的1024标度,则单位为KB。因此,将科学前缀改写为以计算机为中心。

相关讨论 KB = 1000字节,KiB = 1024字节 +1对于k vs. K,这是正确的,但是当ISO前缀的字母已经大写时(如在Mega,Giga和Tera中的M,G和T),这无济于事。 许多人,特别是来自美国的人,倾向于混淆ISO单位和前缀的大小写。

除以1024。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有