zoukankan      html  css  js  c++  java
  • 硬盘整数分区计算器和公式

    硬盘整数分区计算器和公式下载,附Win7系统盘整数分区方法

    要想吧分区显示为整数,可没有那么简单,下面我就为大家详细分析硬盘分区容量显示之谜:

    1. 硬盘厂商为了换算方便,是按照千进制来计算硬盘容量的,一块1TB的硬盘实际容量是1,000,000,000,000Bit=976,562,500KB=953,674MB=931GB左右,分区后实际可用容量会更小;

    2. 操作系统实际计算硬盘容量是按照1024进制,由此导致实际可用容量小于标称容量,硬盘容量越大,“损失”的容量也越大;

    3. 电脑当中实际显示的分区大小,既不是按照硬盘厂商的设计也不是操作系统的设计,而是另有误差。原因就是硬盘在分区和格式化之后还会在硬盘上占用一定的空间用来存储磁盘结构和数据位置等信息;

    4. 对于FAT32分区,每1024字节可用容量会使用4字节用于存储磁盘结构和数据存储位置等信息,但分区中第一GB可用容量却不占用额外的存储容量,因此FAT32整数分区公式为:

    应分配MB数=(分区GB数-1)×4+1024×分区GB数

    5. 对于NTFS分区,原理更加复杂。NTFS分区的最小容量单位不可能精确到1MB,而是柱面大小。硬盘一般有255磁头,63扇区,故每柱面大小为:512bitx255x63=8225280bit=7.84423828125MB

    如果要分10GB,那么应当是10x1024MB=10240MB
    实际需要柱面数为10240÷7.84423828125=1305.4
    柱面只可能算整数,即1306个柱面
    这样实际应分MB数为1306x7.84423828125=10244.575MB
    不管小数点后面几位都进1,也就是10245MB,这样系统才能认成是10.0GB了

        上面的计算方法太过复杂,原理大家了解一些就行了,真正操作时如果还用公式+计算器慢慢换算,那就效率太低了。现在已经有人为我们设计了简单方便的硬盘整数分区计算器,支持FAT32和NTFS两种格式:

     
    如果是给WIn7分系统盘的话,它会自动预留100MB的隐藏分区,因此在输入分区容量的时候,必须把计算器的数值+100,非系统分区则不需要

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TFrmMain = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        ComboBox1: TComboBox;
        Edit1: TEdit;
        Label3: TLabel;
        Button1: TButton;
        Button2: TButton;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        procedure ComboBox1Change(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      FrmMain: TFrmMain;
      partitionNum  , FactPartitionNum : integer;
      i : integer;
    
    implementation
    
    {$R *.dfm}
    {应分配MB数=(分区GB数-1)×4+1024×分区GB数}
    function FAT32(Partition : integer):Integer;
    var
      j : integer;
    begin
      j := (Partition-1)*4+1024*Partition;
      Result := j;
    end;
    {
    如果要分10GB,那么应当是10x1024MB=10240MB
    实际需要柱面数为10240÷7.84423828125=1305.4
    柱面只可能算整数,即1306个柱面
    这样实际应分MB数为1306x7.84423828125=10244.575MB
    不管小数点后面几位都进1,也就是10245MB,这样系统才能认成是10.0GB了
    应分配MB数 = 取整数位((取整数位(分区GB数*1024/7.84423828125)+1) * 7.84423828125 ) +1
    }
    function NTFS(Partition : integer):Integer;
    var
      k : integer;
    begin
      K := trunc((trunc(Partition*1024 / 7.84423828125)+1)* 7.84423828125 ) +1;
      Result := k;
    end;
    
    procedure TFrmMain.ComboBox1Change(Sender: TObject);
    begin
      if self.ComboBox1.Text = 'FAT32' then
      begin
        i := 1 ;
      end;
      if self.ComboBox1.Text = 'NTFS' then
      begin
        i :=2 ;
      end;
    
    end;
    
    procedure TFrmMain.Button2Click(Sender: TObject);
    begin
      if i=1 then
      begin
        Label10.Caption := IntToStr(FAT32(StrToInt(Edit1.Text)));
      end;
      if i=2 then
      begin
        Label10.Caption := IntToStr(NTFS(StrToInt(Edit1.Text)));
      end;
    end;
    
    end.
    
    
  • 相关阅读:
    stdin和STDIN_FILENO的区别
    运算放大器和仪表放大器有哪些区别?
    仪表放大器与运算放大器的区别是什么?
    如何将库文件移到另一个库
    altium designer 中器件原理图库中,将一个器件分成几部分是如何操作的?就是如何用part表示?
    linux串口基本编程
    WCF寄宿(Host)之自我寄宿(Self-Hosting)简单实例【Windows应用程序宿主】
    WCF寄宿(Host)之自我寄宿(Self-Hosting)简单实例【Console应用为宿主】
    GUI创建各常用控件(二)
    GUI创建各常用控件(一)
  • 原文地址:https://www.cnblogs.com/beeone/p/1792165.html
Copyright © 2011-2022 走看看