Johannes Kerksieck: Hex/Dezimal konvertieren mal ganz easy!

Beitrag lesen

Hallo,

4 == /16 :-) (4 bits nach rechts schieben = /2 hoch 4)
Diese Funktion funktioniert nur fuer hex-zahlen <=255 (=0xFF)

Na und?
Und sicher kann man doch mit einem kleinen Zusatz das ganze bis FFF erweitern, oder?

Na klar:

var HexChars="0123456789ABCDEF";
function Hex(dec)
{ var a = 0;
var HexZahl = "";
while (dec>>a != 0)
{ HexZahl = HexChars.charAt((dec>>a)&0xf) + HexZahl;
  a+=4;
}
return HexZahl
}

Mit leichten Änderungen kannst du das auch für Oktalzahlen und Binärzahlen verwenden.
oktal: die Und-Bedingung in der Bitmaske auf 7 setzen und a jeweils um 3 erhöhen
binär: die Und-Bedingung in der Bitmaske auf 1 setzen und a jeweils um 1 erhöhen

(Wie gesagt: Bitoperatoren keine Ahnung)

Kurzer Versuch einer Erklärung:
Die Zahl ist in Binärform gespeichert (in Bits => 0 oder 1)
Beispiel: Die Dezimalzahl 26 ist im Binärsystem 11010.
1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 = 26
(16 + 8 + 0 + 2 + 0 = 26)

Nun zur Umwandlung:
4 Bits entsprechen einer Hexadezimalstelle.
11010 wird beim ersten Durchlauf mit 0xf (1111 in Bit-Form) verknüpft.
Es wird bitweise eine UND-Bedingung abgefragt (0 bleibt 0, 1 bleibt 1).
Dadurch maskiert man die letzten 4 Bitstellen, die in dem Beispiel 1010 sind.
(bzw F hexadezimal, 15 dezimal)
Also: 1010 => A.

Beim zweiten Durchlauf werden die Bits 4 Stellen nach rechts geschoben:
Aus 11010 verschwinden die letzten 4 Stellen; übrig bleibt 1.
Zusammengesetzt ergibt sich die Hexadezimalzahl 1A.

Für Oktalzahlen gilt im Prinzip das gleiche, nur das 3 Bit eine Oktalstelle bilden.

Johannes