Seite 1 von 1

Umwandlung zwischen Zahlensystemen

Verfasst: 09.11.2013 15:30
von UNI
Hallo,

ich habe mich schon etwas länger in Foren umgeschaut und immer wieder festgestellt, dass es einige, z.T. recht komplizierte und für Anfänger sehr undurchsichtige Proceduren gibt, um Zahlen von Binär oder Hexadezimal in Dezimal umzuwandeln. Hier mal für Einsteiger eine kleine Auswahl, wie man die gebräuchlichsten Zahlenformate (Binär, Dezimal und Hexadezimal) sehr einfach umwandeln kann:

Code: Alles auswählen

; Eingabe einer beliebigen Dezimalen Zahl
b=120

; Dezimal in Binär
a$=Bin(b)
Debug "Dec2Bin "+Str(b)+" = "+a$

; Binär in Dezimal
a=Val("%"+a$)
Debug "Bin2Dec "+a$+" = "+Str(a)

; Dezimal in Hexadezimal
a$=Hex(b)
Debug "Dec2Hex "+Str(b)+" = "+a$

;Hexadezimal in Dezimal
a=Val("$"+a$)
Debug "Hex2Dec "+a$+" = "+Str(a)

;Binär in Hexadezimal
a$=Bin(b)
b$=Hex(Val("%"+a$))
Debug "Bin2Hex "+a$+" = "+b$

;Hexadezimal in Binär
a$=Hex(b)
b$=Bin(Val("$"+a$))
Debug "Hex2Bin "+a$+" = "+b$
Liebe Grüße
UNI :)

__________________________________________________
Thread verschoben
Anfänger>Code, Tipps und Tricks
09.11.2013
RSBasic

Re: Umwandlung zwischen Zahlensystemen

Verfasst: 25.11.2013 23:13
von _sivizius

Code: Alles auswählen

#charBase64 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz._"
Procedure.s SBAnum_convert_to(func_value, Type, char$=#charBase64, Offset=0)
  If type<Len(char$)+1
    If func_value < 0
      func_value = -func_value
      func_output$ = "-"
    EndIf
    exp = 1
    While SBAnum_power(Type, exp)-1 < func_value
      exp = exp + 1
      If exp = 0
        Break
      EndIf
    Wend
    For k=exp To 1 Step -1
      x = SBAnum_power(Type, k) - 1
      For i=Type To 0 Step -1
        x = x - SBAnum_power(Type, k-1)
        If func_value > x
          func_value = func_value - x - 1
          i = i + Offset
          If i>Len(char$)
            i = i - Len(char$)
          EndIf
          func_output$ = func_output$ + Mid(char$, i,1)
          Break
        EndIf
      Next
    Next
  EndIf
  ProcedureReturn func_output$
EndProcedure
Procedure SBAnum_convert_from(func_value$, Type, char$=#charBase64, Offset=0)
  char$ = Mid(char$, 1+Offset) + Mid(char$, 1, Offset)
  If func_value$
    isit = 1
    char$ = Mid(char$, 1+Offset, type)
    For k=0 To Len(func_value$)
      If Not FindString(char$, Mid(func_value$, k, 1))
        isit = 0
        Break
      EndIf
    Next
    If isit
      If Mid(func_value$, 1, 1) = "-"
        string$ = ReverseString(Mid(func_value$, 2))
      Else
        string$ = ReverseString(func_value$)
      EndIf
      
      work$ = Mid(char$, 1, Type)
      i = 1
      For k = 1 To Len(string$) 
        func_output = func_output + (FindString(work$, Mid(string$, k, 1))-1) * i
        i = i * Type
      Next
      
      If Mid(func_value$, 1, 1) = "-"
        func_output = -func_output
      EndIf
    EndIf
  Else
    func_output = 0
  EndIf
  ProcedureReturn func_output
EndProcedure
nutz ich...auch wenn das mit dem offset noch nicht ganz so geht...
vll. sieht ja jmd noch ein oder den anderen fehler. eig kann ich das auch nicht wirklich empfehlen.

Re: Umwandlung zwischen Zahlensystemen

Verfasst: 26.11.2013 11:39
von NicTheQuick
Ich hatte da auch 2007 mal was gebastelt. Das geht mit beliebiger Genauigkeit: Base_Convert() mit beliebig vielen Stellen