Frage

Ich habe ein Array:

$arr[0] = 95
$arr[1] = 8
$arr[2] = 0
$arr[3] = 0

Das ist Bytes. Ich brauche einen DWORD. Ich habe versucht:

$dword = $arr[0]+$arr[1]*265+$arr[2]*265*265+$arr[3]*265*265*265;

Ist das richtig oder mache ich etwas falsch gemacht?

War es hilfreich?

Lösung

Versuchen:

$dword = (($arr[3] & 0xFF) << 24) | (($arr[2] & 0xFF) << 16) | (($arr[1] & 0xFF) << 8) | ($arr[0] & 0xFF);

Es kann auch Ihren Weg mit einigen Korrekturen vorgenommen werden:

$dword = $arr[0] + $arr[1]*0x100 + $arr[2]*0x10000 + $arr[3]*0x1000000;

oder mit pack / auspacken:

$dword = array_shift(unpack("L", pack("CCCC", $arr[0], $arr[1], $arr[2], $arr[3])));

Andere Tipps

Oder versuchen

<?php
$arr = array(95,8,0,0);
$bindata = join('', array_map('chr', $arr));
var_dump(unpack('L', $bindata));
both (Emil H und mein Code) geben Sie 2143 als das Ergebnis.

oder zumindest 256 verwenden, anstatt 265.

Der Code sollte korrekt funktionieren, aber Sie sollten mit 256 multiplizieren, nicht 265. (in 8 Bit gibt es 2 ^ 8 = 256 eindeutige Werte). Es funktioniert, weil mit 256 multipliziert ist das gleiche wie die Bits 8 Stellen nach links verschoben wird.

Vielleicht sollten Sie erwägen, die bitweise Operatoren stattdessen besser die Absicht zu vermitteln. Siehe http://theopensourcery.com/phplogic.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top