Umwandlung zwischen Zahlensystemen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
UNI
Beiträge: 1
Registriert: 09.11.2013 15:20

Umwandlung zwischen Zahlensystemen

Beitrag 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
Man muss nicht alles wissen, man muss nur wissen wo es steht. Trotzdem sollte man sich über einige Dinge gedanken machen, damit einem wirkliche Erleuchtung widerfährt.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Umwandlung zwischen Zahlensystemen

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Umwandlung zwischen Zahlensystemen

Beitrag von NicTheQuick »

Ich hatte da auch 2007 mal was gebastelt. Das geht mit beliebiger Genauigkeit: Base_Convert() mit beliebig vielen Stellen
Antworten