PHP und Variablen-Typen

  • Ich habe folgendes Problem, ich versuche ein PHP-Skript zu schreiben welches verschiedene Bitoperationen durchführt.


    PHP interpretiert aber leider jede Zahl die ich eingebe als char und rechnet dementsprechend mit dem ASCII-Wert.


    Als Beispiel:


    Code
    $testoutput = fopen ("testoutput", "wb");
    fwrite ($testoutput, $magic);
    $magic = $magic >> 1;
    fwrite ($testoutput, $magic);


    $magic erhält dabei vorher den Wert 0XEFAD0307 (dies funktioniert auch, da der Wert aus einer anderen Datei ausgelesen wird).


    Die ersten 4 Bytes werden auch so in die Ausgabe geschrieben.
    Die Zeile "$magic = $magic >> 1;" verschiebt das ganze jetzt jedoch nicht um 1 Bit nach rechts sondern um 0x31, da aus einem mir unerklärlichen Grund die 1 als char angesehen wird und dadurch der ASCII-Wert 0x31 benutzt wird.


    Als weiteren Test dazu habe ich folgendes geschrieben


    PHP
    <?php
    	$test = 2;
    	echo gettype($test);
    	$fhandle = fopen("test.bin", "wb");
    	fwrite ($fhandle, $test);
    	fclose($fhandle);
    
    ?>


    Dort landet in der test.bin der Wert 0x32 und das obwohl mir gettype vorher versichert das es sich um einen Integer handelt.


    Hat jemand einen Vorschlag was ich machen kann?

  • Versuch doch deinen Hex-Wert mal in eine richtige Zahl zu wandeln, denn ich bin mir sicher, der Wert wird als String interpretiert.


    Versuch mal:


    <?php
    echo "0XEFAD0307" + 0 . "<br>";
    echo 0XEFAD0307 + 0 . "<br>";
    ?>


    Ergebnis:


    0
    4021093127


    Alles klar?

    D400 + Opera + Ubuntu 8.04 Server = 14W
    MSI G31M2FD v2.1 + E8400 + 2GB + Ubuntu Server 8.04 = 54W
    EEE Box B202 + Opera + Ubuntu 8.10 Server = 18W

  • Die +0 Lösung gibt mir auch 2x 4021093127 aus.


    Das Problem ist ja auch nicht der Hex-Wert ansich (dieser passt, sofern er aus einer Datei eingelesen wird) sondern die 1 bei der Bitverschiebung die falsch interpretiert wird.
    settype() habe ich auch schon ausprobiert, leider brachte dies auch keine Besserung.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!