PureBoard
https://www.purebasic.fr/german/

Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)
https://www.purebasic.fr/german/viewtopic.php?f=3&t=31069
Seite 1 von 2

Autor:  funkheld [ 18.09.2018 10:01 ]
Betreff des Beitrags:  Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

Hallo, guten Tag.

Wie kann man eine Decimalzahl (56789) in Hex zum Printen bitte umwandeln?
Nicht mit Purebasic-Umwandlungsbefehlen sondern zu Fuss....

Danke.
Gruss

Autor:  RSBasic [ 18.09.2018 10:44 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

Wenn du selber umrechnen willst, hier zwei Wikipedia-Seiten, die dir verständlich die jeweiligen Zahlensysteme zeigen:
Dezimalsystem (Basis 10): https://de.wikipedia.org/wiki/Dezimalsystem
Hexadezimalsystem (Basis 16): https://de.wikipedia.org/wiki/Hexadezimalsystem

Autor:  NicTheQuick [ 18.09.2018 11:06 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

So zum Beispiel:
Code:
Procedure.s hexhex(value.i)
   Protected result.s = ""
   
   While value
      ; Und wenn du lieber A-F statt a-f hast, dann einfach das 'a' durch ein 'A' ersetzen.
      result = Chr('0' + (value % 16) + (value % 16) / 10 * ('a' - '0' - 10)) + result
      value / 16
   Wend
   
   ProcedureReturn result
EndProcedure

Debug hexhex(56789)

Autor:  ¯\_(ツ)_/¯ [ 18.09.2018 11:11 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

Danke für den Code NicTheQuick, ist immer interessant, wie der Code ungefähr intern abläuft.
Code:
Procedure.s hexhex(value.i)
Bild

Autor:  Kiffi [ 18.09.2018 11:11 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

NicTheQuick hat geschrieben:
Code:
Debug hexhex(56789)

sozusagen eine Bibi Blocksberg - Prozedur
Bild

Autor:  RSBasic [ 18.09.2018 11:12 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

Da hatten zwei User den gleichen Gedanken. :lol:

Autor:  NicTheQuick [ 18.09.2018 11:14 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

:lol:
Schön, dass es euch gefällt. Ich hab zur endgültigen Verwirrung noch das Bool() entfernt, damit man nicht mehr so gut durchblickt und mehr Fragen stellen kann.

Wenn das ganze schnell sein soll, dann würde ich es aber anders machen. Wichtig war mir erst mal, dass es funktioniert.

Autor:  NicTheQuick [ 18.09.2018 11:25 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

Ich hab mal vor Ewigkeiten, oder genauer gesagt im Oktober 2014 eine Procedure geschrieben, die von jeder Basis in jede andere konvertieren kann, und dabei sogar gebrochene Zahlen kann.
Heute würde ich das wieder anders machen, mit mehr Pointern, aber es funktioniert immer noch. Hier der unveränderte Originalcode:
Code:
Procedure.s Base_Convert(Value.s, InBase.l = 10, OutBase.l = 2, nbDecimals.l = 100)
   Protected p.l, *c.Character, left.s, l.l, lout.s, Mod.l, out.s, rout.s, right.s, a.l
   
   *c = @Value
   While *c\c
      Select *c\c
         Case '0' To '9' : *c\c - '0' + 1
         Case 'a' To 'z' : *c\c - 'a' + 11
         Case 'A' To 'Z' : *c\c - 'A' + 11
         Case '.' ;do nothing
         Default : *c\c = 1
      EndSelect
      *c + SizeOf(Character)
   Wend
   
   p = FindString(Value, ".", 1)
   If p
      left = Left(Value, p - 1)
      right = Mid(Value, p + 1, Len(Value) - p)
   Else
      p = Len(Value)
      left = Value
      right = ""
   EndIf
   
   If left ;Vorkommateil
      While left <> ""
         Mod = 0 : *c = @left : out = ""
         While *c\c
            Mod = Mod * InBase + *c\c - 1
            l = Mod / OutBase
            If l Or out
               out + Chr(l + 1)
            EndIf
            Mod - (l * OutBase)
            
            *c + SizeOf(Character)
         Wend
         
         left = out
         lout = Chr(Mod + 1) + lout
      Wend
   Else
      lout = Chr(1)
   EndIf
   
   If right ;Nachkommateil
      a = 0
      p = Len(right)
      While right <> Chr(1) And a < nbDecimals
         *c = @right + (p - 1) * SizeOf(Character)
         p = 0 : Mod = 0 : out = ""
         While *c >= @right
            Mod + (*c\c - 1) * OutBase
            out = Chr((Mod % InBase) + 1) + out
            Mod / InBase
            *c - SizeOf(Character)
            p + 1
         Wend
         
         right = out
         rout + Chr(Mod + 1)
         a + 1
      Wend
   EndIf
   
   If rout : out = lout + "." + rout : Else : out = lout : EndIf
   
   *c = @out
   While *c\c
      Select *c\c
         Case 1 To 10 : *c\c + '0' - 1
         Case 11 To 36 : *c\c + 'A' - 11
         Case '.' ;do nothing
         Default : *c\c = '?'
      EndSelect
      *c + SizeOf(Character)
   Wend
   
   ProcedureReturn out
EndProcedure

Define unkomprimiert.s = "12345678901234567890"
Define komprimiert.s = Base_Convert(unkomprimiert, 10, 36, 100)
Define dekomprimiert.s = Base_Convert(komprimiert, 36, 10, 100)

Debug "Unkomprimiert: " + unkomprimiert
Debug "Komprimiert: " + komprimiert
Debug "Dekomprimiert: " + dekomprimiert

Define s.s
Debug "Beispiel für 10 -> 2 und zurück"
s = Base_Convert("3.1415926535897932384626433832795028841971693993", 10, 2, 100)
Debug s
Debug Base_Convert(s, 2, 10, 100)
Debug "3.1415926535897932384626433832795028841971693993 (Original)"
Debug "Beispiel für 10 -> 36 und zurück"
s = Base_Convert("3.1415926535897932384626433832795028841971693993", 10, 36, 100)
Debug s
Debug Base_Convert(s, 36, 10, 100)
Debug "3.1415926535897932384626433832795028841971693993 (Original)"

Autor:  Nino [ 18.09.2018 13:26 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

Jetzt fehlt eigentlich nur noch ein Video aus Deinem Bastelkeller, wie Du das Ganze umwandelst zu (Aachener) Printen. Bin schon sehr gespannt. :mrgreen:

Autor:  RSBasic [ 18.09.2018 13:33 ]
Betreff des Beitrags:  Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)

+1

Ich höre schon die Erstellung des Videos... Hallo liebe Freunde des Bastelkellers und ...

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/