PHP 4.3

2.11 Konvertieren von Zahlen

Von Zeit zu Zeit werden Sie beim Programmieren Zahlen konvertieren müssen. Meist liegt dabei eine Zahl in einem bestimmten Datentyp vor, beispielsweise als Integer, und soll zum Beispiel als hexadezimale Zahl ausgegeben werden. Eine klassische Anwendung dafür wäre eine hexadezimale Farbangabe im HTML-Format. PHP liefert dafür bereits vordefinierte Funktionen, die sich sehr einfach aufrufen lassen. Dabei ist zu beachten, dass die in eine Hexadezimal- oder Binärzahl konvertierte Dezimalzahl immer als String repräsentiert wird. Der Integerwert 59 wird durch die dechex()-Funktion als String "3b" zurückgeliefert. Die größte Dezimalzahl, die dechex() dabei verarbeiten kann, ist 2147483647, was in hexadezimaler Schreibweise dem Wert "7fffffff" entspricht.

Die Konvertierung einer Dezimalzahl in eine Hexadezimalzahl:

<?php

  $zahl = 59;
  // $zahl liegt als Integer vor
  echo $zahl . "<br>";

  $zahl = dechex(59);
  // $zahl liegt als String vor
  echo $zahl . "<br>";

?>

Browserausgabe:

  59
  3b

Um eine als String vorliegende Hexadezimalzahl in eine Integer-Zahl oder (über eine weitere automatische Typkonvertierung) eine als String vorliegende Dezimalzahl umwandeln zu lassen, verfügt PHP über die Funktion hexdec(). Die Anweisung echo hexdec("3b"); würde also die Dezimalzahl 59 im Browser ausgeben.

Vorsicht müssen Sie bei mathematischen Operationen walten lassen, die einer solchen Typkonvertierung folgen. So würde $zahl = $zahl + 10 nicht etwa 45 (als hexadezimale Entsprechung von 69) ergeben, sondern 13. Da $zahl nämlich als String vorliegt, findet eine automatische Typkonvertierung zu einem Integerwert statt. Dabei schneidet PHP das b einfach vom String 3b ab und addiert daher 3 + 10. Die automatische Typkonvertierung von PHP findet also immer auf Basis von Dezimalzahlen statt.

Automatische Typkonvertierung einer Hexadezimalzahl:

<?php

  $zahl = dechex(59);
  echo $zahl + 10 . "<br>";

?>

Browserausgabe:

 13

Analog zu dechex() erfolgt mittels der PHP-Funktion decbin() die Konvertierung einer Dezimalzahl in eine Binärzahl, die ebenso als Typ String zurückgeliefert wird. Auch hier beträgt der größte umwandelbare Integerwert 2147483647, der in binärer Schreibweise aus 31 Einsen besteht.

Mit der Funktion bindec() wandeln Sie den String einer Binärzahl wieder in eine Dezimalzahl um.

Die Konvertierung einer Dezimalzahl in eine Binärzahl und zurück:

<?php

  $zahl = 59;
  // $zahl liegt als Integer vor
  echo $zahl . "<br>";

  $zahl = decbin(59);
  // $zahl liegt als String vor
  echo $zahl . "<br>";

  $zahl = bindec($zahl);
  // $zahl liegt wieder als Dezimalzahl vom Typ String vor
  echo $zahl . "<br>";

?>

Browserausgabe:

  59
  111011
  59


Auch bei Binärzahlen müssen Sie in der Praxis auf die automatische Typkonvertierung aufpassen. Auch hier würde PHP bei einer mathematischen Anweisung eine strikte Konvertierung zum Typ Integer durchführen. Dies kann insbesondere bei Binärzahlen weitreichende Folgen für den Skriptablauf haben, weil die Wertdimensionen hier schnell astronomische Unterschiede annehmen, wie das folgende Beispiel zeigt:

Achtung bei der Typkonvertierung!

<?php

  $zahl = 2559;
  echo "Mein Kontostand beträgt " . $zahl . " Euro<br>";
  $zahl = decbin($zahl);
  echo "Binär sieht das Ganze aber noch viel besser aus: " . $zahl . "<br>";
  echo "Leider schulde ich davon aber 1857 Euro meinem Bruder.<br>";
  $zahl = $zahl - 1857;
  echo "Bleiben für mich noch " . $zahl . " Euro.<br>";

?>

Browserausgabe:

  Mein Kontostand beträgt 2559 Euro
  Binär sieht das Ganze aber noch viel besser aus: 100111111111
  Leider schulde ich davon aber 1857 Euro meinem Bruder.
  Bleiben für mich noch 100111107254 Euro.
  

Kein Grund sich zu beschweren, oder? Sie sehen an diesem Beispiel noch ein mal ein deutliches Beispiel für die notwendige Sorgfalt beim Umgang mit der Konvertierung durch Zahlen.

Nachfolgend haben wir die wichtigsten Funktionen zur Zahlenkonvertierung noch einmal in einem Skriptbeispiel zusammengefasst. Die Variablennamen sind dort nach den Funktionen, die auf den Ausgangswert $zahl angewendet wurden, benannt.

Die Konvertierung von Zählsystemen in PHP:

<?php

  $zahl = 1000000; // Ausgangszahl zur Basis Zehn

  $dec2bin = decbin($zahl); // Von Basis Zehn zur Binärzahl konvertieren
  $dec2hex = dechex($zahl); // Von Basis Zehn zur Hexadezimalzahl konvertieren
  $dec2oct = decoct($zahl); // Von Basis Zehn zur Oktalzahl konvertieren
  $hex2dec = hexdec($dec2hex); // Hexadezimal- zur Basis Zehn konvertieren


  echo $dec2bin, "<br>",
       $dec2hex, "<br>",
       $dec2oct, "<br>",
       $hex2dec, "<br>";

?>

Browserausgabe:

  
  11110100001001000000
  f4240
  3641100
  1000000

Kommentare (0)

Ihr Kommentar

Name