Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)
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
Wie kann man eine Decimalzahl (56789) in Hex zum Printen bitte umwandeln?
Nicht mit Purebasic-Umwandlungsbefehlen sondern zu Fuss....
Danke.
Gruss
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
Dezimalsystem (Basis 10): https://de.wikipedia.org/wiki/Dezimalsystem
Hexadezimalsystem (Basis 16): https://de.wikipedia.org/wiki/Hexadezimalsystem
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)
So zum Beispiel:
Code: Alles auswählen
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)
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: Alles auswählen
Procedure.s hexhex(value.i)
Zuletzt geändert von ¯\_(ツ)_/¯ am 18.09.2018 11:11, insgesamt 1-mal geändert.
Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)
sozusagen eine Bibi Blocksberg - ProzedurNicTheQuick hat geschrieben:Code: Alles auswählen
Debug hexhex(56789)
Hygge
Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)
Da hatten zwei User den gleichen Gedanken.
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Eine decimalzahl in Hex umwandeln zu Printen (zu Fuss)
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.
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
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:
Heute würde ich das wieder anders machen, mit mehr Pointern, aber es funktioniert immer noch. Hier der unveränderte Originalcode:
Code: Alles auswählen
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)"
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.
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 ...
Ich höre schon die Erstellung des Videos... Hallo liebe Freunde des Bastelkellers und ...