Hello,
Klasse, mit 'V1myvar/V1yourvar/V1ourvar' klappt es, ebenso wie mit 'V*' und 'V3'. Vielen Dank dafür.
Eine letzte Frage hätte ich noch (ich lese tatsächlich ein externes Dateiformat ein): Gibt es auch einen Format String, der bewirkt, dass die binärdaten nur bis zum ersten NUL Byte gelesen werden? Im konkreten Fall kommt erst ein 56 byte langer string und dann zwei 4 byte integer. Allerdings kommt es vor, dass im String (der nicht immer die ganzen 56 byte ausnutzt) nach dem ersten NUL Byte noch mülldaten kommen, die von unpack dann als komische Zeichen an den entpackten String drangehängt werden.
Klar, man könnte den Sting byte für byte lesen und nach dem ersten NUL Byte aufhören, aber vielleicht geht das ja auch "eleganer"?
Lies einen Block mit einer byteorientierten Dateifunktion ein, werte ihn mit einer ebensolchen "Stringfunktion" aus.
$packed_values = '';
if(($pos = strpos($buffer, chr(0))!==0)
{
$packed_values = substr($buffer, 0, $pos);
}
und entscheide dann, wieviele Werte Du auswerten musst.
http://de.php.net/manual/en/function.strpos.php
http://de.php.net/manual/en/function.substr.php
Soweit ich mich erinnere, kann man bei der Angabe der Maske für die Decodierung (unpack) der Werte auch mehr angeben, als nachher tatsächlich vorhanden sind. Das solltest Du aber selber nochmal ausprobieren. Das hieße, dass Du nur den auszuwertenden Bytestrom entsprechend obigem Beispiel kürzen müsstest und dann nur soviele Werte daraus generiert werden, wie Futter dafür vorhanden ist.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
