Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 20 Math
  gp 20.1 Math_Integer
  gp 20.2 Math_TrigOp
  gp 20.3 Math_Stats
  gp 20.4 Math_Fraction
  gp 20.5 Math_BinaryUtils


Rheinwerk Computing

20.5 Math_BinaryUtils  toptop


Besprochene Version: 0.3.0 Lizenz: LGPL
Klassendatei(en): Math/BinaryUtils.php

Math_BinaryUtils ist eine Klasse, die den Umgang mit binären Zahlen deutlich vereinfacht. Sie stellt Methoden zur Verfügung, um Zahlen in eine binäre Darstellung und zurück zu konvertieren. Darüber hinaus sind auch noch einige Rechenfunktionen definiert. Die Methoden werden alle statisch aufgerufen.

Im Folgenden erläutere ich nur die meiner Ansicht nach wichtigsten Funktionalitäten. Benötigen Sie noch eine Methode, die hier nicht erläutert ist, dann werfen Sie einen Blick in die API-Dokumentation, die Sie unter der URL http://pear.php.net/package/Math_BinaryUtils/docs finden.

Möchten Sie eine Integer-Zahl in die entsprechende binäre Darstellung konvertieren, könnte das so aussehen:

require_once('Math/BinaryUtils.php'); 
// Zu konvertierende Zahl 
$int=119266; 
 
// Konvertierung und Ausgabe 
$bin=Math_BinaryUtils::decToBin($int); 
echo "$int wird bin&auml;r so dargestellt: $bin"; 
// Ausgabe: 
// 119266 wird binär so dargestellt: 11101000111100010

Die Methode liefert also einen normalen String zurück. Möchten Sie eine Fließkommazahl konvertieren, ist das auch möglich. Dazu ist floatToBin() vorgesehen. Auch diese Methode bekommt die zu konvertierende Zahl als Parameter übergeben. Der String, der zurückgegeben wird, kann allerdings nicht direkt ausgegeben werden. Die Daten sind darin binär kodiert enthalten, so dass sie für den Datenaustausch, nicht aber für eine Darstellung auf dem Bildschirm genutzt werden können.

Für die beiden Methoden sind auch Umkehrungen definiert. binToDec() bekommt einen String übergeben, der aus 0 und 1 besteht, konvertiert diesen in eine Integer-Darstellung und gibt die Zahl zurück.

Auch der Methode binToFloat() wird der String, der die binäre Darstellung einer Fließkommazahl enthält, als Parameter übergeben, [Zurzeit muss es sich hierbei um eine Variable handeln. ] und sie liefert eine Fließkommazahl zurück.

Interessant ist auch die Methode binToString(). Diese bekommt einen String aus Nullen und Einsen übergeben, analysiert ihn und gibt den Text zurück, der durch das Bitmuster beschrieben wird.

require_once('Math/BinaryUtils.php'); 
$bin='100100011100100'; 
echo (Math_BinaryUtils::binToString($bin)); 
// Gibt "Hä" aus

Die Konvertierung erfolgt auf Basis des erweiterten ASCII- bzw. ISO-8859–1-Zeichensatzes.

Mit dem Paket können Sie auch das NUXI-Problem recht elegant in den Griff bekommen. Das NUXI-Problem bezeichnet die Problematik, dass Prozessoren unterschiedlicher Hersteller die Bytes in einem Wort unterschiedlich ablegen. Ein Wort besteht aus 16 Bit, also aus 2 Bytes. X86-Prozessoren, wie sie von Intel oder AMD hergestellt werden, nutzen die Little-Endian-Kodierung. In diesem Fall wird das niederwertige Byte an der kleineren Speicheradresse abgelegt. Unter der nächsten Speicheradresse wird dann das höherwertige Byte abgelegt.

Andere Hersteller wie Sun oder IBM nutzen in ihren SPARC- bzw. PPC-Prozessoren die Big-Endian-Kodierung. In diesem Fall werden die Bytes in der umgekehrten Reihenfolge abgelegt. Daraus resultiert auch der Name NUXI-Problem. Der Begriff UNIX kann im Speicher in zwei Worten (UN und IX) abgelegt werden. Vertauschen Sie innerhalb der beiden Worte die Bytes, so erhalten Sie NUXI.

Übernehmen Sie binäre Daten direkt vom Betriebssystem oder von einem anderen Server, so können die unterschiedlichen Formate zu einem Problem werden.

Um herauszufinden, welche Kodierung das System nutzt, auf dem ein Script läuft, können Sie die Methode getNativeOrder() aufrufen. Diese gibt Ihnen entweder die Konstante MATH_BINARYUTILS_BIG_ENDIAN oder die Konstante MATH_BINARYUTILS_LITTLE_ENDIAN zurück, die in der Klasse definiert sind.

Wenn Sie wissen, welche Kodierung vorliegt, können Sie Daten mithilfe der Methoden aus Tabelle 20.3 konvertieren.


Tabelle 20.3 Konvertierungsfunktionen
Big Endian Little Endian Beschreibung
bigEndianToBin() littleEndianToBin() Konvertiert ein oder mehrere übergebene Worte in einen String aus 0 und 1.
bigEndianToFloat() littleEndianToFloat() Konvertiert ein oder mehrere übergebene Worte in eine Fließkommazahl.
bigEndianToInt() littleEndianToInt() Wandelt das übergebene Wort in eine Integer-Zahl um.
bigEndianToString() littleEndianToString() Übernimmt binäre Daten als Parameter und gibt einen String zurück.

Hilfreich kann sicher auch die Methode getHexBytes() sein. Ihr wird ein Wert übergeben, den sie als String interpretiert. Für jedes einzelne Zeichen, das enthalten ist, wird Ihnen dann der ASCII-Code in hexadezimaler Schreibweise zurückgegeben. Der Rückgabewert ist hierbei ein String, bei dem die hexadezimalen Zahlen durch Leerzeichen getrennt sind.

require_once('Math/BinaryUtils.php'); 
$data="Hallo"; 
echo (Math_BinaryUtils::getHexBytes($data)); 
// gibt 48 61 6c 6c 6f aus 
 
$data=123; 
echo (Math_BinaryUtils::getHexBytes($data)); 
// gibt 31 32 33 aus
 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de