numsys.bmx

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

 

Sebe

Betreff: numsys.bmx

BeitragSo, Jan 23, 2005 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab hier mal ein kleines Modul für BlitzMax geschrieben. Mit diesem Modul lassen sich Zahlen folgender Systeme kreuz- und quer umwandeln: Binär-, Oktal-, Dezimal- und Hexadezimalsystem.

Code:
Code: [AUSKLAPPEN]

Strict

Rem
bbdoc: NumSys
End Rem
Module infernalsoftware.numsys

ModuleInfo "Version: 1.00"
ModuleInfo "Author: Sebastian Erben"
ModuleInfo "License: Lesser GNU Public License"
ModuleInfo "Copyright: Infernal Software"

Import BRL.Retro


'Binärumwandlungen

Rem
bbdoc: Wandelt eine Binärzahl in eine Oktalzahl um
returns: Einen Stringwert, der die Oktalzahl enthält
about:
Syntax -> Oktalwert:String = b2o$(Binärwert$)
End Rem
Function b2o:String(binaryvalue:String)
   
   Return d2o$(b2d%(binaryvalue$))
   
EndFunction

Rem
bbdoc: Wandelt eine Binärzahl in eine Dezimalzahl um
returns: Einen Integerwert, der die Dezimalzahl enthält
about:
Syntax -> Dezimalwert:Int = b2d%(Binärwert$)
End Rem
Function b2d:Int(binaryvalue:String)

   Local castnumber:Int = 0
   Local decimalvalue:Int = 0
   
   For Local counter:Int = 0 To Len(binaryvalue$)
   
      castnumber% = Mid(binaryvalue$, counter% + 1, 1).toint()
      
      decimalvalue%:+ castnumber * (2 ^ (Len(binaryvalue$) - counter%))
         
   Next
   
   Return decimalvalue%

EndFunction

Rem
bbdoc: Wandelt eine Binärzahl in eine Hexadezimalzahl um
returns: Einen Stringwert, der die Hexadezimalzahl enthält
about:
Syntax -> Hexadezimalwert:String = b2h$(Binärwert$)
End Rem
Function b2h:String(binaryvalue:String)

   Return d2h$(b2d(binaryvalue$))
   
EndFunction


'Oktalumwandlungen

Rem
bbdoc: Wandelt eine Oktalzahl in eine Binärzahl um
returns: Einen Stringwert, der die Binärzahl enthält
about:
Syntax -> Binärwert:String = o2b$(Oktalwert$)
End Rem
Function o2b:String(octalvalue:String)

   Return d2b$(o2d%(octalvalue$))
   
EndFunction

Rem
bbdoc: Wandelt eine Oktalzahl in eine Dezimalzahl um
returns: Einen Integerwert, der die Dezimalzahl enthält
about:
Syntax -> Dezimalwert:Int = o2d%(Oktalwert$)
End Rem
Function o2d:Int(octalvalue:String)
   
   Local castnum:Int = 0
   Local decimalvalue:Int = 0
   
   For Local counter:Int = 1 To Len(octalvalue$)
   
      castnum% = Mid(octalvalue$, counter%, 1).toint()
      decimalvalue%:+ castnum% * (8 ^ (Len(octalvalue$) - counter%))
      
   Next
   
   Return decimalvalue%
   
EndFunction

Rem
bbdoc: Wandelt eine Oktalzahl in eine Hexadezimalzahl um
returns: Einen Stringwert, der die Hexadezimalzahl enthält
about:
Syntax -> Hexadezimalwert:String = o2h$(Oktalwert$)
End Rem
Function o2h:String(octalvalue:String)

   Return d2h$(o2d%(octalvalue$))
   
EndFunction


'Dezimalumwandlungen

Rem
bbdoc: Wandelt eine Dezimalzahl in eine Binärzahl um
returns: Einen Stringwert, der die Binärzahl enthält
about:
Syntax -> Binärwert:String = d2b$(Dezimalwert%)
End Rem
Function d2b:String(decimalvalue:Int)

   Return prove4zeros$(Bin$(decimalvalue:Int))
   
EndFunction

Rem
bbdoc: Wandelt eine Dezimalzahl in eine Oktalzahl um
returns: Einen Stringwert, der die Oktalzahl enthält
about:
Syntax -> Oktalwert:String = d2o$(Dezimalwert%)
End Rem
Function d2o:String(decimalvalue:Int)
   
   Local octalvalue$ = ""
   
   Repeat
      
      octalvalue$ = (decimalvalue% Mod 8) + octalvalue$
      
      decimalvalue% = decimalvalue% / 8
   
   Until decimalvalue% Mod 8 = 0 And decimalvalue% / 8 = 0
   
   Return prove4zeros$(octalvalue$)
   
EndFunction

Rem
bbdoc: Wandelt eine Dezimalzahl in eine Hexadezimalzahl um
returns: Einen Stringwert, der die Hexadezimalzahl enthält
about:
Syntax -> Hexadezimalwert:String = d2h$(Dezimalwert%)
End Rem
Function d2h:String(decimalvalue:Int)

   Return prove4zeros$(Hex$(decimalvalue:Int))
   
EndFunction


'Hexadezimalumwandlungen

Rem
bbdoc: Wandelt eine Hexadezimalzahl in eine Binärzahl um
returns: Einen Stringwert, der die Binärzahl enthält
about:
Syntax -> Binärwert:String = h2b$(Hexadezimalwert%)
End Rem
Function h2b:String(hexadecimalvalue:String)
   
   Return d2b$(h2d%(hexadecimalvalue$))
   
EndFunction

Rem
bbdoc: Wandelt eine Hexadezimalzahl in eine Oktalzahl um
returns: Einen Stringwert, der die Oktalzahl enthält
about:
Syntax -> Oktalwert:String = h2o$(Hexadezimalwert%)
End Rem
Function h2o:String(hexadecimalvalue:String)
   
   Return d2o$(h2d%(hexadecimalvalue$))

EndFunction

Rem
bbdoc: Wandelt eine Hexadezimalzahl in eine Dezimalzahl um
returns: Einen Integerwert, der die Dezimalzahl enthält
about:
Syntax -> Dezimalwert:Int = h2d$(Hexadezimalwert%)
End Rem
Function h2d:Int(hexadecimalvalue:String)

   Local castchar:String = ""
   Local castnum:Byte = 0
   Local decimalvalue:Int = 0

   For Local counter:Int = 1 To Len(hexadecimalvalue$)
   
      castchar$ = Mid(hexadecimalvalue$, counter%, 1)
      
      Select castchar$
         
         Case "A"
         
            castnum:Byte = 10
         
         Case "B"
         
            castnum:Byte = 11
            
         Case "C"
         
            castnum:Byte = 12
            
         Case "D"
         
            castnum:Byte = 13
            
         Case "E"
         
            castnum:Byte = 14
            
         Case "F"
         
            castnum:Byte = 15
            
         Default
         
            castnum:Byte = castchar$.toint()
         
      End Select
      
      decimalvalue%:+ castnum:Byte * 16 ^ (Len(hexadecimalvalue$) - counter%)
      
   Next
   
   Return decimalvalue%
   
EndFunction

Function prove4zeros:String(number2prove:String)
   
   Local tempchar:String = ""
   Local counter:Int = 1
   Local endflag:Byte = 0
   
   Repeat
   
      tempchar$ = Mid(number2prove$, counter%, 1)
      
      If tempchar$ = "0"
      
         counter%:+ 1
         
      Else
      
         endflag = 1
         
      EndIf
      
   Until endflag = 1
   
   number2prove$ = number2prove$[(counter% - 1)..]
   
   Return number2prove$
   
EndFunction


Ausserdem werden überflüssige Nullen am Anfang abgeschnitten, ich hoffe ich schaut's euch mal an. Kritik jeder Art ist erwünscht Wink

F.S.: Hier ist noch ein kleiner Beispielcode zum Testen der Funktionen:

Code:
Code: [AUSKLAPPEN]

Strict

Global DeziInput:Int = 0
Global RestInput:String = ""

RestInput$ = Input("Binärzahl eingeben: ")
Print(b2o$(RestInput$))
Print(b2d%(RestInput$))
Print(b2h$(RestInput$))

RestInput$ = Input("Oktalzahl eingeben: ")
Print(o2b$(RestInput$))
Print(o2d%(RestInput$))
Print(o2h$(RestInput$))

DeziInput% = Input("Dezimalzahl eingeben: ").toint()
Print(d2b$(DeziInput%))
Print(d2o$(DeziInput%))
Print(d2h$(DeziInput%))

RestInput$ = Input("Hexadezimalzahl eingeben: ")
Print(h2b$(RestInput$))
Print(h2o$(RestInput$))
Print(h2d%(RestInput$))
 

noir

BeitragSo, Jan 23, 2005 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
das hättest du auch hier noch dazu posten können: http://wp1002880.wp004.webpack...php?t=8696
sonst verläuft man sich im code archiv noch irgendwann
 

Sebe

BeitragSo, Jan 23, 2005 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, hatte ganz vergessen, dass das hier auch noch rumgeistert... 8)
Ich achte das nächste mal besser drauf, sry...

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group