Julian von Mendel: Bit-Shifting

Hi,

ich möchte ein PHP-Programm schreiben, das mit einem Mikrocontroller kommuniziert. Ich möchte jetzt eine Zahl wie z. B. "65535" in zwei Bytes aufteilen und übertragen. Ich weiß aber nicht wie das geht. In C auf meinem Mikrocontroller hätte ich (uint8_t)(65536<<8)>>8 geschrieben um das erste Byte zu erhalten und 65536>>8 fürs zweite. In PHP geht das Bit-Shifting zwar von der Syntax her äquivalent, aber es gibt keinen 8-Bit-Datentyp. Ich könnte in 5 Zeilen eine Funktion schreiben, die manuell nur die letzten 8 Bit einer Variable in eine andere überträgt. Aber ich finde diese Lösung unelegant. Gibt es eine Funktion, Syntax o. Ä. mit der ich das Problem sauber lösen kann?

Schöne Grüße
Julian

  1. Hi,

    im Klartext bedeutet dass, dass ich eine Bitfolge wie
    1111111111111110 = 65534
    auf die letzteren 8-Bit
    11111110 = 254
    kürzen möchte.

    Schöne Grüße
    Julian

  2. Hi,

    [lang=php]
            $secondbyte = bindec(substr(decbin($number),-8));
            $firstbyte  = $number>>8;
    [/lang]

    geht natürlich. Gefällt mir aber nicht.

    Schöne Grüße
    Julian

    1. Hallo,

      geht natürlich. Gefällt mir aber nicht.

      dann gefällt Dir $sb=bindec(str_pad(decbin(($fb=$n>>8)),16,0))^$n; vermutlich genauso wenig :(

      Gruß aus Berlin!
      eddi

    2. Hi Julian,

      $secondbyte = bindec(substr(decbin($number),-8));

      Bit-Und mit 255 bzw. 0xff, also ($number & 0xff) dürfte dir ebenfalls $secondbyte geben. Besser?

      Gruß,
      Andreas.

      1. Hi Andreas,

        $secondbyte = bindec(substr(decbin($number),-8));

        Bit-Und mit 255 bzw. 0xff, also ($number & 0xff) dürfte dir ebenfalls $secondbyte geben. Besser?

        deutlich. Danke.

        Schöne Grüße
        Julian