Bitmask auslesen
Heizer
- php
Liebes Forum
Ich möchte eine Bitmaske auslesen.
Ich möchte es an einem Beispiel demonstrieren:
imagewriteHeadline($str,$output) {
// Diese Funktion erzeugt eine Überschrift als Grafik
}
$output soll nun so gesetzt werden, daß entweder ein GIF oder ein PNG oder ein JPEG oder eine Kombination aus diesen geschrieben oder zurückgegeben wird. Ich denke mir also:
RETURN = 0
WRITE = 1
GIF = 2
PNG = 4
JPEG = 8
$output kann also werte von 1 - 15 haben (das kann sich aber natürlich noch erweitern). Meine Frage ist also, ob jemand eine allgemeine Funktion weiß, mit der ich diese Bitwerte einzeln bekomme.
Eine idee, wie die Rückgabe aussehen könnte, wäre ein Array mit allen gesetzen bits.
$output = 3;
=> array(1,2); // schreibt ein GIF Bild
$output = 10;
=> array(2,8); // gibt ein GIF und ein JPEG zurück
$output = 14;
=> array(2,4,8); // gibt ein GIF, PNG und JPEG zurück
Kann mir jemand eine soche Funktion nennen oder mir zumindest einen Denkansatz liefern, wie man so etwas schreiben kann? Wie gesagt, sie soll mit beliebigen Bitwerten umgehen können.
Danke und ein frohes neues
Heizer
你好 Heizer,
$output soll nun so gesetzt werden, daß entweder ein GIF oder ein PNG
oder ein JPEG oder eine Kombination aus diesen geschrieben oder
zurückgegeben wird. Ich denke mir also:
RETURN = 0
WRITE = 1
GIF = 2
PNG = 4
JPEG = 8$output kann also werte von 1 - 15 haben (das kann sich aber
natürlich noch erweitern). Meine Frage ist also, ob jemand eine
allgemeine Funktion weiß, mit der ich diese Bitwerte einzeln bekomme.
Die Funktion ist ganz einfach: du gehst alle Bits durch und pruefst, ob
es gesetzt ist. Kann man z. B. so machen:
function test($var) {
$max = 32;
$ret = Array();
for($i=0;$i<$max;++$i) {
$val = (1<<$i);
if($var & $val) $ret[] = $val;
}
return $ret;
}
var_dump(test(1|2|4));
Ich bin von 32 ausgegangen, weil 32 Bit-Rechner normal sind. Bei 64
Bit-Maschinen muss man $max eventuell hoeher setzen, um alle Bits
abzudecken, aber 32 Bit sollten eigentlich fuer alle Masken reichen.
再见,
CK
Ich danke dir, nach kurzer Lektüre und Spielerei habe ich nun endlich die Bit Operatoren verstanden.
Der erste gute Vorstatz für das neue Jahr ist damit erfüllt :)
grüße
Heizer