Binärzahlen erzeugen und ausgeben (Thema: PHP Beispiele)

Wie man Strings in Binärzahlen umwandelt und Binärzahlen wiederum in Strings

1. Binärzahl zu Dezimalwert

Um eine Binärzahl in ihren Dezimalwert umzuwandeln, wird die Funktion bindec() verwendet. Sie erwartet einen String als Parameter, welcher die Binärzahl enthält und gibt den Dezimalwert als Integer zurück.

PHP-Code
<?php
	$a = bindec('1001');
	var_dump($a);
?>

HTML-Code: Ausgabe
int(9)


2. Dezimalzahl zu Binärzahl

Um die vorherige Operation rückgängig zu machen, also um vom Dezimalwert in den Binärwert umzurechnen, wird decbin() verwendet. Die Funktion erwartet einen Integer und gibt den Binärwert als String zurück. Der String der Binärzahl beginnt immer mit der ersten eins, es gibt also keine führenden Nullen.

PHP-Code
<?php
	$a = decbin(9);
	$b = decbin(16);
	$c = decbin(-16);
	var_dump($a, $b, $c);
?>

HTML-Code: Ausgabe
string(4) "1001"
string(5) "10000"


Die Umwandlung kann auch mit sprintf() durchgeführt werden. An die Funktion muss als erster Parameter der String „%032b” und als zweiter der Dezimalwert als Integer übergeben werden. Im String „%032b” wird die Anzahl der Stellen der sich ergebenden Binärzahl durch die „32” repräsentiert und kann beliebig geändert werden. Es ist auch möglich, nur „%b” zu übergeben. In diesem Fall ist die Anzahl der Stellen dynamisch und das Ergebnis identisch mit decbin(). Ebenfalls ist es möglich, beliebigen weiteren Text in den String einzufügen, welcher dann zum Teil der Ausgabe wird (nur sollte kein Prozentzeichen als Teil des Textes verwendet werden).

PHP-Code
<?php
	$a = sprintf('%b', 9); // Ausgabe wie bei decbin()
	$b = sprintf('%032b', 9); // mindestens 32 Zeichen
	$c = sprintf('%064b', 9); // mindestens 64 Zeichen
	$d = sprintf('Die Binaerzahl ist %b.', 9); // Binaerzahl mit Text
	$e = sprintf('%02b', 1024); // mindestens 2 Zeichen fuer Binaerzahl mit 11 Zeichen - sprintf waehlt die 11
	var_dump($a, $b, $c, $d, $e);
?>

HTML-Code: Ausgabe
string(4) "1001"
string(32) "00000000000000000000000000001001"
string(64) "0000000000000000000000000000000000000000000000000000000000001001"
string(24) "Die Binaerzahl ist 1001."
string(11) "10000000000"


Dem nachfolgenden Beispiel kann eine Funktion entnommen werden, welche eine Dezimalzahl in eine Binärzahl umwandelt und damit den sich ergebenden String automatisch in kleine Blöcke einteilt (zum Beispiel alle 4 Zeichen ein Leerzeichen). Zudem kann als bequemer Parameter die Minimallänge des Strings übergeben werden.

PHP-Code
<?php
	function decbinChunked($dec, $chunksize=4, $minlength=1) {
		$bin = sprintf('%0'.$minlength.'b', $dec);
		
		// ggf Nullen am Anfang auffuellen, sodass Bloecke entsprechend der $chunksize gebildet werden koennen
		$remainder = strlen($bin) % $chunksize;
		$bin = str_repeat('0', ($remainder > 0 ? $chunksize - $remainder : 0)) . $bin;
		
		return chunk_split($bin, $chunksize, ' ');
	}

	// 1 umwandeln, 4 Zeichen je Block, mindestens 32 Zeichen Gesamtlaenge
	echo('1: ' . decbinChunked(1, 4, 32) . "\n");

	// 1 umwandeln, 4 Zeichen je Block, mindestens 64 Zeichen Gesamtlaenge
	echo('1: ' . decbinChunked(1, 4, 64) . "\n");

	// 15 umwandeln, 4 Zeichen je Block, mindestens 1 Zeichen Gesamtlaenge
	echo('15: ' . decbinChunked(15, 4) . "\n");

	// 128 umwandeln, 2 Zeichen je Block, mindestens 1 Zeichen Gesamtlaenge
	echo('128: ' . decbinChunked(128, 2) . "\n");

	// 12517 umwandeln, 10 Zeichen je Block, mindestens 1 Zeichen Gesamtlaenge
	echo('12517: ' . decbinChunked(12517, 10) . "\n");
?>

HTML-Code: Ausgabe
1: 0000 0000 0000 0000 0000 0000 0000 0001 
1: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 
15: 1111 
128: 10 00 00 00 
12517: 0000001100 0011100101 


Kommentare (0)

Von neu nach alt