Tom2: Mit Hex-Zahlen rechnen

Hallo Leute

Ich bastle mir gerade eine ASP(VBScript)-Seite, wobei ich mit Zahlen im Hexadezimalsystem rechnen muss. Leider habe ich bis jetzt noch keine bessere Lösung gefunden, als die Daten ins Dezimalsystem umzuwandeln, zu rechnen und wieder ins Hexadezimalsystem zu konvertieren. Im Internet hab ich auch nichts brauchbares gesehen. Hat von euch jemand damit Erfahrung und könnte mir einen Tipp geben?

MfG

Tom2

  1. Hallo

    ...wobei ich mit Zahlen im Hexadezimalsystem rechnen muss.

    Versuch mal "Start->Ausführen-> CALC.EXE
    Dann unter Ansicht -> Wissenschaftlich anklicken.
    Dannach solltest Du so Knöppe wie HEX/DEZ etc. sehen.
    Vorausgesetzt, Du bist mit WIN zugange, aber bei ASP/VB gehe ich mal davon aus.
    Auch MfG

    1. Hallo anonymer Mitleser

      ...wobei ich mit Zahlen im Hexadezimalsystem rechnen muss.
      Versuch mal "Start->Ausführen-> CALC.EXE
      Dann unter Ansicht -> Wissenschaftlich anklicken.
      Dannach solltest Du so Knöppe wie HEX/DEZ etc. sehen.

      Und wie bringe ich den IIS dazu, dass er dies selbständig macht? ;-)
      Nein, es soll im ASP-Skript selbst mit Hex-Werten gerechnet werden, wobei mir kaum ein anderer Weg als die Umwandlung ins Dezimalsystem übrig bleibt (und stell dir vor: Ich hab sogar schon eine Funktion dafür geschrieben ;-).

      Vorausgesetzt, Du bist mit WIN zugange, aber bei ASP/VB gehe ich mal davon aus.

      Bingo!

      MfG

      Tom2

      PS: Deiner Hilfe nach arbeitest du bei Microsoft. *SCNR*

      1. Gruß

        ...wobei ich mit Zahlen im Hexadezimalsystem rechnen muss.
        Und wie bringe ich den IIS dazu, dass er dies selbständig macht? ;-)

        Sorry, aber es war (s.o.) die Rede davon, das Du mit Hex-Zahlen rechnen mußt, nicht der IIS.
        Wenn Du dich nicht präzise ausdrückst, ... aber ich dachte mir schon sowas.

        PS: Deiner Hilfe nach arbeitest du bei Microsoft. *SCNR*

        DAS hättest Du Dir sparen können, aber um die Frage zu beantworten :
        Ich arbeite zwar als Programmierer, schon über 20 Jahre, aber nicht bei M$.
        Also glaub mir, ich kann Strings jeder Art in Zahlen und diese wieder zurück in Strings für fast jede Basis konvertieren.
        Und das in verschiedenen Sprachen, aber auf meine Hilfe kannst/möchtest Du ja sicherlich verzichten.
        Ich werde mich in Zukunft wieder aufs reine Mitlesen verlegen.
        Das ist für alle Seiten gesünder.

        Bye.

        1. Hallo Mitleser

          ...wobei ich mit Zahlen im Hexadezimalsystem rechnen muss.
          Und wie bringe ich den IIS dazu, dass er dies selbständig macht? ;-)
          Sorry, aber es war (s.o.) die Rede davon, das Du mit Hex-Zahlen rechnen mußt, nicht der IIS.

          Mein ASP-Skript muss mit Hex-Werten rechnen, nicht ich.

          Wenn Du dich nicht präzise ausdrückst, ... aber ich dachte mir schon sowas.

          Ok, ich habe mich nicht ganz verständlich ausgedrückt. Mir war anfangs klar, was ich meinte, weil _ich_ mit Zahlen in verschiedenen Systemen umgehen kann. Ich werde versuchen, mich das nächste mal etwas deutlicher auszudrücken.

          PS: Deiner Hilfe nach arbeitest du bei Microsoft. *SCNR*
          DAS hättest Du Dir sparen können[...]

          Bitte entschuldige, die Aussage war wirklich nicht ernst gemeint, und böse schon gar nicht. Deine Hilfe war nur zimlich genau so, wie ich sie von Microsoft erwartet hätte: Absolut korrekt, aber für mein Problem nicht zu gebrauchen. ;-)

          Ich arbeite zwar als Programmierer, schon über 20 Jahre, aber nicht bei M$.
          Also glaub mir, ich kann Strings jeder Art in Zahlen und diese wieder zurück in Strings für fast jede Basis konvertieren.
          Und das in verschiedenen Sprachen, aber auf meine Hilfe kannst/möchtest Du ja sicherlich verzichten.
          Ich werde mich in Zukunft wieder aufs reine Mitlesen verlegen.
          Das ist für alle Seiten gesünder.

          Nein, ich (und sicherlich auch der Rest des Forums) möchten nicht auf deine Hilfe verzichten. Leute mit deiner Erfahrung sind sehr wertvoll für das Forum, und ich möchte nicht dafür verantwortlich sein, dass es immer weniger davon gibt ( ;-). Also, ich entschuldige mich hier nochmals hochoffiziell:

          Sorry!

          Mein Schreibstil ist nun mal oft etwas ironisch, jedoch sehr, sehr selten wirklich böse gemeint. Ich will auch niemanden persönlich angreifen oder so, obwohl ich schon ein paar mal so verstanden wurde.
          Ich glaube, dass die meisten 'bösen Flame-Wars' hier im Forum auf Missverständnisse zurückgehen, durm: Geht locker an die Postings ran und nehmt nicht alles all zu ernst.

          MfG

          Tom2

          1. Hallo Tom2

            Bitte entschuldige, die Aussage war wirklich nicht ernst gemeint, ...
            ... ich entschuldige mich hier nochmals hochoffiziell:
            Sorry!

            Drei Entschuldigungen für ein Posting, wow, da kann ich ja nicht nein sagen.
            Also akzeptiert ! Und in gewisser Weise hattest Du ja auch Recht.
            Hätte mir eigentlich denken können, daß das zu einfach war, aber der Wunsch, endlich auch mal was zu beantworten, war halt zu stark.
            Dementsprechend hoch war dann auch die Frustration, als das so nach hinten losging.

            Also nix für ungut, in Zukunft denke ich wieder entwas länger nach, ob und was ich evtl. antworte, damit löst sich das Problem dann i.a. eh von selbst.

            MfG der Mitleser ;-)

  2. Ich bastle mir gerade eine ASP(VBScript)-Seite, wobei ich mit Zahlen im Hexadezimalsystem rechnen muss. Leider habe ich bis jetzt noch keine bessere Lösung gefunden, als die Daten ins Dezimalsystem umzuwandeln, zu rechnen und wieder ins Hexadezimalsystem zu konvertieren.

    Das Prinzip ist recht simpel und funktioniert genauso wie bei Dezimal- oder Binärzahlen.

    Als erstes solltest Du Dir klar darüber werden, daß der Computer weder Hexadezimal-, noch Dezimal-, noch sonst irgendwelche Zählzysteme kennt. Was Du da sicherlich vor Dir hast, sind für den Computer Texte.

    Ein Text besteht aus Buchstaben, jeder Buchstabe eines -nennen wir es mal- "Zahlwortes" stellt eine Stelle im jeweiligen System dar. Nehmen wir mal eine Dezimalzahl 23:

    4 2
     | +- Einerstelle  = 10^0 (10 hoch 0)
     +--- Zehnerstelle = 10^1 (10 hoch 1)

    Wie Du vielleicht schon siehst, kann man diese 23 auch in Einzelteile zerlegen:

    42=4*10^1 + 2*10^0

    Um also aus einem "Zahlwort" ein echte Zahl zu machen, muß man lediglich die einzelnen Stellen mit dem jeweiligen Wert multiplizieren und diese Ergebnisse dann addieren.

    Programmansätze gibt's dafür viele, ich benutze immer die Schiebemethode: Es wird von links nach rechts jeweils eine Ziffer eingelesen. Bevor eine Ziffer gelesen wird, wird unser Ergebnis um eine Stelle nach links verschoben (x*10), dann die Ziffer gelesen und zum Ergebnis zuaddiert:

    Für 42 wäre das:
      Ausgangsposition                         > zahl=0
      Ziffer 2 einlesen und zu zahl addieren   > zahl=4
      zahl eine Dezimalstelle nach links (*10) > zahl=40
      Ziffer 3 einlesen und zu zahl addieren   > zahl=42
      Keine Ziffer mehr vorhanden, fertig!     > zahl=42

    Der einzige Unterschied zwischen Dezimal-, Hex-, Oktal- und Binärziffern ist die Basis, um die verschoben wird. Im Dezimalsystem ist das (wie gesehen) 10, im Hexsystem 16, Oktal 8, Binär 2. Statt also zum Schieben mit 10 zu multiplizieren mußt Du bei Hexzahlen mit 16 multiplizieren.
    Das ist der ganze Trick dabei.

    Die Umwandlung der Ziffern 0-9 und A-F in Zahlen von 0-15 kriegst Du sicher selbst hin, zum Beispiel mit einer case- (bzw. switch-) Anweisung.

    Für die Umwandlung von Zahlen in Hexadezimal-Zahlworte mußt Du wiederum die Zahl in ihre Einzelteile, also ihre Stellen zerlegen. Das geht mit Dividieren und ich kenne nur eine etwas aufwendigere Lösung.

    Und die gute Nachricht zuletzt: Eigentlich hat jede Programmiersprachen eingebaute Funktionen, mit denen sich Texte in Zahlen und Zahlen in Texte umwandeln lassen. Für C fällt mir da scanf und printf ein, Modula-2 kennt str2int und writeformat, VB sollte etwas ähnliches haben.

    Gruß,
      soenk.e

    1. Hallo Sönke

      Zuerst einmal vielen Dank für deine sehr ausführliche Antwort, auch wenn sie mich leider nicht viel weiter gebracht hat.

      Programmansätze gibt's dafür viele, ich benutze immer die Schiebemethode: [...]

      Ich benutze auch diese Methode, hab auch schon eine kleine Funktion geschrieben, die einen Hex-Wert in eine Dezimalzahl umwandelt.

      Und die gute Nachricht zuletzt: Eigentlich hat jede Programmiersprachen eingebaute Funktionen, mit denen sich Texte in Zahlen und Zahlen in Texte umwandeln lassen.

      Genau das ist mein Problem: Ich konnte nicht ausfindig machen, ob ich in VBScript mit Hex-Zahlen rechnen kann. Scheint aber nicht der Fall zu sein.

      Für C fällt mir da scanf und printf ein, Modula-2 kennt str2int und writeformat, VB sollte etwas ähnliches haben.

      *g* Ich hab gerade letzte Woche an einer C-Prüfung eine str2int-Funktion geschrieben. Leider wurde sie nicht honoriert. :(
      In VBScript habe ich nur die Funktion hex gefunden, welche eine Zahl in einen Hex-Wert(String) umwandelt. Mal sehen, wie weit ich mit der und meiner eigenen Funktion komme...

      MfG und besten Dank

      Tom2

      1. Programmansätze gibt's dafür viele, ich benutze immer die Schiebemethode: [...]

        Ich benutze auch diese Methode, hab auch schon eine kleine Funktion geschrieben, die einen Hex-Wert in eine Dezimalzahl umwandelt.

        Und die gute Nachricht zuletzt: Eigentlich hat jede Programmiersprachen eingebaute Funktionen, mit denen sich Texte in Zahlen und Zahlen in Texte umwandeln lassen.

        Genau das ist mein Problem: Ich konnte nicht ausfindig machen, ob ich in VBScript mit Hex-Zahlen rechnen kann. Scheint aber nicht der Fall zu sein.

        Öhm, wenn Du schon eine Funktion geschrieben hast, die einen Hex-Text in eine Zahlvariable umwandelt, wo ist denn dann das Problem? Ich habe das Gefühl, wir reden aneinander vorbei :)

        Gruß,
          soenk.e

        1. Öhm, wenn Du schon eine Funktion geschrieben hast, die einen Hex-Text in eine Zahlvariable umwandelt, wo ist denn dann das Problem? Ich habe das Gefühl, wir reden aneinander vorbei :)

          Ok, nochmals meine Frage, so deutlich wie es geht: Kann ich mit VBScript mit Hex-Werten rechnen _ohne_ diese zuerst ins Dezimalsystem umzuwandeln? AFAIK kann man das in ein paar anderen Sprachen.
          In der VBScript Language Reference von MS (wobei ich sagen muss, dass diese für ASP einfach nur schlecht ist) habe ich nur die Funktion Hex() gefunden, welche eine Zahl in einen _String_ mit einem Hex-Wert umwandelt.

          Ok, danke für deine Bemühungen. Ich geh' jetzt nach Hause und übe klar formulierte Fragen zu stellen ;-).

          MfG

          Tom2

          1. Öhm, wenn Du schon eine Funktion geschrieben hast, die einen Hex-Text in eine Zahlvariable umwandelt, wo ist denn dann das Problem? Ich habe das Gefühl, wir reden aneinander vorbei :)

            Ok, nochmals meine Frage, so deutlich wie es geht: Kann ich mit VBScript mit Hex-Werten rechnen _ohne_ diese zuerst ins Dezimalsystem umzuwandeln?

            Hätte ich eigentlich gleich drauf kommen können: http://google.com/search?q=vbscript+hexvalue :)

            Um das nochmal auseinanderzufriemeln:

            1. Hex-Zahlen beginnen im VBScript-Code anscheinend mit "&H".
            Mit der Programmzeile "x = &H3E + 1" sollte x den Wert 3F (hexadezimal) bzw. 63 (dezimal) erhalten.
            Du kannst also direkt im VBScript-Code mit diesem Zahlsystem rechnen, musst die Zahlen halt nur als solche markieren. Genauso funktioniert's auch in anderen Sprachen, C benutzt zum Beispiel 0x als Markierung (hier: 0x3e).

            2. Ich hatte Dich eingangs so verstanden, daß Du von außen, durch irgendeine Benutzereingabe meinetwegen, "Hexzahlen" bekommst. Das sind aber normalerweise Texte, und die müssen nicht in Dezimalzahlen umgewandelt werden, sondern in Zahlvariablen.
            Man wandelt in solchen Fällen _Texte in Zahlen_ um und benutzt für die Darstellung ein System wie das Dezimal- oder Hexadezimalsystem. Aber man verwandelt nicht Hexzahlen in Dezimalzahlen - Hex- oder Dezimalzahlen kennt der Computer einfach nicht.

            Die Funktion, die im ersten Google-Ergebnis (http://www.aboutvb.de/khw/artikel/khwhextodec.htm) vorgestellt wird, ist insofern auch ganz fürchterlich falsch benannt und falsch beschrieben.
            HexToDec() wandelt keine Hexzahl in eine Dezimalzahl, sonden einen Text (im Hexadezimalsystem) in eine Zahl.
            Die Beschreibung, die die da für die VB-Hex-Funktion wählen, ist genauso daneben:

            Mit der Hex-Funktion in Visual Basic können Sie eine Dezimalzahl in
              eine Hex(adezimal)zahl konvertieren.

            Das ist Schwachfug, richtig steht's bei MSDN unter http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafcthex.asp:

            Hex(): Returns a String representing the hexadecimal value of a
              number (gibt einen Text zurück, der eine Zahl im Hexadezimalsystem
              darstellt).

            Die Umkehrfunktion Val() ist unter http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafctval.asp beschrieben.

            Damit sind hoffentlich alle Klarheiten beseitigt :)

            Gruß,
              soenk.e

            1. Hätte ich eigentlich gleich drauf kommen können: http://google.com/search?q=vbscript+hexvalue :)

              Oh Gott, 'hexvalue' heisst das Zauberwort! Hab &H3E8 Dank, jetzt hab ich das, was ich brauche. :)

              MfG

              Tom2