Hallo Besucher, der Thread wurde 1,4k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von JeeK am

Mit dem VC20 Dezimal in Hex - Zahl umwandeln und zurück

  • Hallo !

    das VC20 Basic hat keinen Befehl zur direktem Umrechnung von Dec in Hex oder umgekehrt.

    Hat jemand schonmal versucht die Umrechnung in VC20 Basic zu realisieren?

    Ich benötige die Umrechnung um aus einer bestehenden Assembler Anwendung über 200 Anfangsadressen herauszulesen.
    Zur Verfügung habe ich nur 2 Zahlen die ich mit "peek" lese. Die erste Zahl ist das Highbyte die zweite Zahl das Lowbyte also z.B. 119 ($77) und 164 ($A4).
    Daraus soll die Adresse 42103 werden (aus $A477). Das ist mit dem Taschenrechner sehr mühsam :)


    Danke !!

  • "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Oder hier: Dezimalzahl in Hex umwandeln.


    Die Beispiele im Wiki sind jetzt nicht so der Hit. Vor allem die multiplen IF-Abfragen bei Dezimal->Hex mit den einzeln ausgeführten Hex-Ziffern "A" bis "F" (Zeilen 60 bis 110) rollen mir die Zehennägel auf.

    Ich benötige die Umrechnung um aus einer bestehenden Assembler Anwendung über 200 Anfangsadressen herauszulesen.

    Das ist ja mal ein ziemlicher Brocken. Rein aus Interesse, um welche Anwendung handelt es sich denn genau?

  • Mike Ich hab mir ehrlich gesagt auch nicht besonders Mühe gegeben beim Suchen von Beispielen. ^^


    Außerdem ist das Beispiel im Wiki für das Verständnis nicht so schlecht. Dein Code ist elegant und kompakt, keine Frage. Ob er zum Verständnis des Problems beiträgt weiß ich aber nicht. Es ist ja in erster Linie ein mathematisches, kein Programmier- oder BASIC-Problem.

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Hab auch eins. :)


    Dezimal nach Hex, so schlank und elegant wie es mir eingefallen ist.


    Code
    1. 10 print "=== dezimal in hexadezimal ==="
    2. 20 input "eine dezimalzahl:";a
    3. 30 for p=3 to 0 step -1
    4. 40 : b=int(a/16^p)
    5. 50 : b$=chr$(48-7*(b>9)+b)
    6. 60 : h$=h$+b$
    7. 70 : a=a-b*16^p
    8. 80 next
    9. 90 print "hexadezimalzahl: $";h$

    Diese IF-Orgie im Wiki fand ich auch recht merkwürdig...


    Progrämmle im Anhang.

  • Dezimal nach Hex, so schlank und elegant wie es mir eingefallen ist.

    Das ist mal schönes Basic. Um Klassen besser als diese "ON-(D>0)GOTO6" Verunstaltungen. Guter Programmcode ist in erster Linie leserlich.

    Und wenn's jemand optimierter haben will, dann kann man immer noch möglichst viel in eine Zeile packen. Verständlich bleibt es trotzdem.

  • Dezimal nach Hex, so schlank und elegant wie es mir eingefallen ist.

    Das ist mal schönes Basic. Um Klassen besser als diese "ON-(D>0)GOTO6" Verunstaltungen. Guter Programmcode ist in erster Linie leserlich.

    Und wenn's jemand optimierter haben will, dann kann man immer noch möglichst viel in eine Zeile packen. Verständlich bleibt es trotzdem.

    Dein Lob hat mich sehr gefreut! :)

  • Mike Ich hab mir ehrlich gesagt auch nicht besonders Mühe gegeben beim Suchen von Beispielen. ^^


    Außerdem ist das Beispiel im Wiki für das Verständnis nicht so schlecht. Dein Code ist elegant und kompakt, keine Frage. Ob er zum Verständnis des Problems beiträgt weiß ich aber nicht. Es ist ja in erster Linie ein mathematisches, kein Programmier- oder BASIC-Problem.

    Das war auch der Grund, warum ich die Beispiele dort nicht gegen praxistaugliche Beispiele zu ersetzen. Die Beispiele sind echt holprig, aber wie schon gesagt, sicherlich für einen Anfänger leichter zu erfassen.
    Als Ergänzung kommen bessere Varianten noch ... so ist es mir ein ziemlicher Dorn im Aug. ;)

  • In meinem Vergleich mit einer Transactor-Version, der Wikispaces-Version kann als schnellste Variante folgende bieten:

    Ab 400 die eigentliche Subroutine, ab 1000 das Zeitmess-Framework, Zeile

    Es wird die langsame Exponentialfunktion vermieden. Die von goloMAK verwendete Version kann leicht umgebaut werden, indem p statt von 3 zu 0 gehen zu lassen von 4096 zu 1 durch Division durch 16 in jedem Durchgang erstellt und direkt damit rechnet. Es bleibt aber noch immer auf 4 Stellen limitiert.


    Diese Version ist von den Stellen her unbeschränkt (also nicht auf 16 Bit beschränkt), ohne - als angenehmen Nebeneffekt - auf Kosten der Geschwindigkeit zu gehen. ;)

  • In meinem Vergleich mit einer Transactor-Version, der Wikispaces-Version kann als schnellste Variante folgende bieten: Ab 400 die eigentliche Subroutine, [...]

    Die unterscheidet sich jetzt nicht so wirklich von meiner Implementierung in den Zeilen 6 und 7, wenn man schon einmal die darstellungsfreie Zahl in einer Variable zur Hand hat. ;)


    Jetzt könnte höchstens noch jemand anders einwenden, daß die Änderung der Laufvariable in der FOR-Schleife ja schon mal gar nicht geht ... :sonicht: ... genauso wie die Verwendung von Boole'schen Ausdrücken in ON ... GOTO böse ist. Hach - wie man's macht, macht man's verkehrt.


    :D

  • Die unterscheidet sich jetzt nicht so wirklich von meiner Implementierung in den Zeilen 6 und 7, wenn man schon einmal die darstellungsfreie Zahl in einer Variable zur Hand hat. ;)

    Natürlich, es kocht sich tatsächlich auf das herunter, wenn man es schnell haben will. Den Null-Test von NEXT machen zu lassen und auf den Parsing-Overhead des gesamten Konstantstrings in MID$, auf das lahme GOTO, das nur am Programmanfang schnell ist, zu verzichten ist halt nur noch ein bisschen Tuning oben drauf. Die Schönheit und das was man mit BASIC-Konstrukten machen kann, liegt da eher im Auge des Betrachters. Man kann hier nie alle gleichermaßen zufrieden stellen. Falls man auf die Idee kommt, bei diesem BASIC mit einer Ästhetik zu argumentieren, naja, was soll man da noch sagen - da geht es eigentlich ohnehin nur noch um den Grad der "Obfuscateness" ... ;)

  • Falls man auf die Idee kommt, bei diesem BASIC mit einer Ästhetik zu argumentieren, naja, was soll man da noch sagen - da geht es eigentlich ohnehin nur noch um den Grad der "Obfuscateness" ... ;)

    Also mir ging es nicht um Ästhetik sondern um die Lesbarkeit. Vor allem, wenn es um grundlegende Algorithmen geht, wo ja keinerlei Optimierung notwendig ist. Da frage ich mich schon, ob manche nur noch kryptisch programmieren können.

  • Also mir ging es nicht um Ästhetik sondern um die Lesbarkeit. Vor allem, wenn es um grundlegende Algorithmen geht, wo ja keinerlei Optimierung notwendig ist. Da frage ich mich schon, ob manche nur noch kryptisch programmieren können.

    Stimmt, ein gewisser Ideenreichtum mag dem einen oder anderen als "kryptisch" vorkommen, aber liegt bei jedem die Grenze woanders.
    Je nach Anwendungsweise: Für die Lehre, also wie man generell etwas in BASIC macht, oder für eine konkrete Anwendung (wenn man etwa einen Disassembler oder Assembler programmiert) oder einen Contest, wo man es dann doch möglichst schnell haben will ... die Grenzen sind da fließend, aber das eine schließt das das andere nicht aus und die Leute können hier ja selektiv lesen und sich das heraus picken, was ihnen am ehesten entgegen kommt. ;)