SizeIt() - Byte Converter

Share your advanced PureBasic knowledge/code with the community.
User avatar
Thunder93
Addict
Addict
Posts: 1788
Joined: Tue Mar 21, 2006 12:31 am
Location: Canada

SizeIt() - Byte Converter

Post by Thunder93 »

Cross-platform supported Byte Converter.

Code: Select all

#Base2 = 1024
#Base10 = 1000

Procedure.s SizeIt(Value.q, Base.l = #Base2)  
  Protected unit.b = 0, byte.q, nSize.s, p.l = 0
  
  If Value < 0 : ProcedureReturn "?" : EndIf

  unit = Round(Log(Value)/Log(Base), 0) : If unit : p = 2 : EndIf  
  
  nSize = StrF(Value/Pow(Base, unit))
  
  If ((Base = #Base10) And Value >= 1000) Or Value >= 1024
    nSize = Mid(nSize, 1, FindString(nSize, ".", 1)+2)
  EndIf
  
  ProcedureReturn nSize + StringField(" Bytes, KB, MB, GB, TB, PB", unit+1, ",")  
EndProcedure

CompilerIf #PB_Compiler_IsMainFile
  Debug "   Base 2                        Base 10"
  Debug SizeIt(532)+"                    "+SizeIt(532, #Base10)
  Debug SizeIt(1000)+"                  "+SizeIt(1000, #Base10)
  Debug SizeIt(1024)+"                            "+SizeIt(1024, #Base10)
  Debug SizeIt(1340)+"                       "+SizeIt(1340, #Base10)
  Debug SizeIt(23506)+"                     "+SizeIt(23506, #Base10)
  Debug SizeIt(3400016)+"                      "+SizeIt(3400016, #Base10)
  Debug SizeIt(4500000000)+"                       "+SizeIt(4500000000, #Base10)
  Debug SizeIt(5600000000019)+"                       "+SizeIt(5600000000019, #Base10)
    
  Debug ""+#CRLF$+"-"
  Debug SizeIt(0)
  Debug SizeIt(1000)
  Debug SizeIt(10000)
  Debug SizeIt(1000000)
  Debug SizeIt(100000000)
  Debug SizeIt(10000000000)
  Debug SizeIt(10000000000000)
  Debug SizeIt(10000000000000000)
CompilerEndIf
ʽʽSuccess is almost totally dependent upon drive and persistence. The extra energy required to make another effort or try another approach is the secret of winning.ʾʾ --Dennis Waitley
Joris
Addict
Addict
Posts: 890
Joined: Fri Oct 16, 2009 10:12 am
Location: BE

Re: SizeIt() - Byte Converter

Post by Joris »

Nice.
Yeah I know, but keep in mind ... Leonardo da Vinci was also an autodidact.
Post Reply