Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

DezZahl in HexZahl und umgekehrt





Frage

Hi Leute Ich habe folgendes Problem. Ich möchte über ein VBScript eine Dezimalzahl in eine Hexadezimalzahl umwandeln und diese Hexadezimalzahl dann teilweise wieder in eine Dezimalzahl zurück umwandeln um diese Dezimalzahl dann als Versionsnummer zu verwenden. Hier ein Beispiel: Die Dezimalzahl 783 ergibt als Hexadezimalzahl 30F. Nun möchte ich die erste Ziffer der HexZahl (im Beispiel die „3“) beibehalten und nur die letzten Ziffern/Buchstaben (im Beispiel die „0F“) wieder in eine Dezimalzahl umwandeln. Die Dezimalzahl von 0F wäre 15. Als Ergebnis sollte dann stehen „3.15“, also die „3“ und die „15“ durch einen Punkt getrennt. Noch ein Beispiel: Die DezZahl lautet 586, die umgewandelte HexZahl lautet 24A. Die „2“ aus der HexZahl wird beibehalten, die „4A“ aus der Hexzahl umgewandelt in DezZahl lautet „74“. Das Ergebnis wäre in diesem Beispiel „2.74“. Kann mir dabei vielleicht jemand helfen? Danke im voraus Kaleun

Antwort 1 von semi


function toVer(n) {
  vMinor = n%256;
  vMajor = (n-verMinor)>>8;
  return vMajor + "." + vMinor;
}
alert(toVer(783));
alert(toVer(586));


Antwort 2 von semi

Hier noch zwei Funktionen für die Konvertierung von und zu Hex.

function toHex(n) {
  var hexChars = "0123456789ABCDEF";
  var hex="";
  do {
    hex = hexChars.charAt(n%16) + hex;
  } while((n=Math.floor(n/16))>0);
  return hex;
}

function toDez(hex) {
  return parseInt(hex,16);
}


Antwort 3 von Friedel

@semi: Dein oberes Script hat nicht die gewünschte Funktion. Auch nicht wenn man die Variable verMinor am Abfang deklariert. Sont funktioniert das Scipt nämöich gar nicht. Ich habe mittlerweile ein Script gebastelt mit der gewünschten Funktion und wollte es gerade posten. Jetzt merke ich, dass ich einen wesentlichen Fehler gemacht habe: In der Frage geht es um VBScript, nicht um JavaScript. Damit kann ich leider nicht dienen.

Antwort 4 von Kaleun

@Semi

Danke für deine Mühe. Werde die Scripts am Wochenende testen.

@Friedel

Auch wenn ich das Script in VBScript benötige, würde mich dein JavaScript auch interessieren. Nur um zu sehen, wie es da funktioniert.
Du kannst es ja hier posten, oder mir eine E-Mail schicken.
Meine Adresse stimmt.

Gruß Kaleun

Antwort 5 von semi

Ups! Ich hätte die Frage genauer lesen sollen :-)
Meine Lösung ist in Javascript.
Und Friedel, sie funktioniert.

In jedem Fall ist die Version

minor = zahl MOD 256;
major = (zahl - minor) SHR 8;

Gruß,
Michael

Antwort 6 von semi

Hier kannst Du es ausprobieren.

Antwort 7 von Kaleun

@all

Danke Leute, ihr habt mir sehr geholfen

Gruß Kaleun

Antwort 8 von struppi

Hallo semi,
Was bedeutet denn SHR 8 ? Das kenn ich nicht und finde auch nix darüber...

Mit mod 256 ergeben sich bei größeren Zahlen zweistellige Zahlen vor dem Punkt.
So wie es Kaleun beschrieb müßte außerdem ab 2816 nicht 11 vor dem Punkt stehen sondern ein A. Aber ich nehme an das er es schon so wollte wie Du es gepostet hast.
In VB-script gibt es übrigens die Funktion Hex(Zahl). Die liefert einen hexadezimal-string. (bis zu 8 stellen).
Aber von hex zu deci finde ich nichts fertiges...
Ach übrigens...Friedel hat bestimmt ein Problem mit der ersten Funktion ghabt weil sich da ein Tippfehler eingeschlichen hat... ( n-verMinor)>>8;)
gruß struppi


Antwort 9 von semi

Hi,

Stimmt, das mit dem verMinor war auch falsch. Ich habe es gar nicht gemerkt :-)

Mit SHR 8 meinte ich, um 8 bit nach rechts schieben

z.B. (d=dezimal, h=hex.)

Dezimal: 1234d
Hex : 04D2h

A = 1234d modulo 256d = 210d = D2h
B = 1234d - A = 1234d - 210d = 1024d = 0400h

B SHR 8 (B um 8 bit nach rechts) = 0400h SHR 8 = 0004h

Klartext: Ganzzahlige Division durch 256 bzw. (n DIV 256)

Gruß,
Michael

Antwort 10 von struppi

Oje semi,
Mit der Erklärung bringst Du mich in Verlegenheit. Ich ahne zwar eine gewisse Logik.... aber mir fehlt da einfach Grundlagenwissen...
Trotzdem vielen Dank für die Antwort.
gruß struppi

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: