网上搜到的最精确硬盘分区的算法如下:
硬盘一般有255磁头,63扇区,故每柱面大小为:
512 byte x 255 x 63=8225280 bytes=7.84423828125 MB
如果要分40 GB,那么要40 x 1024 MB=40960 MB
需要柱面数为40960 x 7.84423828125=5221.66
取整数既为5222个柱面
应分M数为5222 x 7.84423828125=40962.6123046875 MB
不管小数点后面几位都进1,也就是40963 MB,windows就认为是40 GB了。
这个方法NTFS和FAT32通用。
转换成PECMD代码:
-------- 回复可见内容 --------
回复可见内容#code=936T950
set^ EnviMode=1
set^ ForceLocal=1
call IntCalc ret 12G //参数1为返回值(以M为单位) 参数2为待转换值(可带单位,如K、M、G、T)
mess. [%ret%M]
_sub IntCalc
set p0=(255 * 63 * 512 / 1M) //每柱面大小:255磁头 x 63扇区 x 512字节每扇区,以M为单位
set p1=%~2 / 1M / %p0% //柱面数:总大小 ÷ 每柱面大小
calc #p2=%p1% //柱面数(整数部分),以M为单位
calc p3=frac[%p1%] //柱面数(小数部分),以M为单位
ifex $%p3%>0, calc p2=%p2% + 1 //柱面数有小数则进1
set p4=%p2% * %p0% //实际大小:柱面数 x 每柱面大小
calc #p5=%p4% //实际大小(整数部分),以M为单位
calc p6=frac[%p4%] //实际大小(小数部分),以M为单位
ifex $%p6%>0, calc p5=%p5% + 1 //实际大小有小数则进1
set-ret %1=%p5%
_end
联系客服